Question: i am working in regex my regex is `/\[([^]\s]+).([^]]+)\]/g` this works great in PHP for `[http://sdgdssd.com fghdfhdhhd]`
but when i use this regex for javascript it do not match with this input string

my input is `[http://sdgdssd.com fghdfhdhhd]`

Answer: 
In JavaScript regex, you must **always** escape the `]` inside a character class:

```
\[([^\]\s]+).([^\]]+)\]

```

See the [regex demo](https://regex101.com/r/wY4lR7/1)

JS parsed `[^]` as \*any character including a newline in your regex, and the final character class `]` symbol as a literal `]`.

In this regard, *JS regex engine deviates from the [POSIX standard](https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions)* where *smart placement* is used to match `[` and `]` symbols with bracketed expressions like `[^][]`.

> 
> The `]` character is treated as a literal character if it is the first character after `^`: `[^]abc]`.
> 
> 
> 

In [JS and Ruby](http://www.regular-expressions.info/charclass.html#special), that is not working like that:

> 
> You can include an unescaped closing bracket by placing it right after the opening bracket, or right after the negating caret. `[]x]` matches a closing bracket or an `x`. `[^]x]` matches any character that is not a closing bracket or an `x`. This does not work in JavaScript, which treats `[]` as an empty character class that always fails to match, and `[^]` as a negated empty character class that matches any single character. Ruby treats empty character classes as an error. So **both JavaScript and Ruby require closing brackets to be escaped with a backslash to include them as literals in a character class**.
> 
> 
> 

**Related:**

* `(?1)` [regex subroutine](https://www.regular-expressions.info/subroutine.html) used to shorten a PCRE pattern conversion - [REGEX from PHP to JS](https://stackoverflow.com/questions/60275590)
I would like to add this little fact about translating PHP `preg_replace` Regex in JavaScript `.replace` Regex :

```
<?php preg_replace("/([^0-9\,\.\-])/i";"";"-1 220 025.47 $"); ?>
Result : "-1220025.47"

```

with PHP, you have to use the quotes `"..."` around the Regex, a point comma to separate the Regex with the replacement and the brackets are used as a repetition research (witch do not mean the same thing at all.

```
<script>"-1 220 025.47 $".replace(/[^0-9\,\.\-]/ig,"") </script>
Result : "-1220025.47"

```

With JavaScript, no quotes around the Regex, a comma to separate Regex with the replacement and you have to use `/g` option in order to say multiple research in addition of the `/i` option (that's why `/ig`).

I hope this will be usefull to someone !
Note that the `"\,"` may be suppressed in case of `"1,000.00 $"` (English ?) kind of number :

```
<script>"-1,220,025.47 $".replace(/[^0-9\.\-]/ig,"")</script>
<?php preg_replace("/([^0-9\.\-])/i";"";"-1,220,025.47 $"); ?>
Result : "-1220025.47"

```