Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式接受*而不在模式中指定它_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式接受*而不在模式中指定它

Javascript 正则表达式接受*而不在模式中指定它,javascript,regex,Javascript,Regex,在开发JavaScript正则表达式时,我们发现了一些奇怪的行为 对于以下模式:[\'-=] 接受字符*。(”,-,=也被接受,但这是预期的。) 我们可以用任何字符替换“=”。如果我们改变模式字符顺序,它就不再工作了 有人知道这个吗?因为在这种情况下,-表示范围。在ASCII表格中,*介于'和=之间。您的模式还将匹配'和=之间的所有其他字符(例如数字)。您可以找到所有ASCII字符。 如果要匹配”=或-则应转义减号。使用这个模式: [\\\= ] /代码> < p>模式中间的“--”字符是导致

在开发JavaScript正则表达式时,我们发现了一些奇怪的行为

对于以下模式:
[\'-=]

接受字符
*
。(
-
=
也被接受,但这是预期的。)

我们可以用任何字符替换“=”。如果我们改变模式字符顺序,它就不再工作了


有人知道这个吗?

因为在这种情况下,
-
表示范围。在ASCII表格中,
*
介于
'
=
之间。您的模式还将匹配
'
=
之间的所有其他字符(例如数字)。您可以找到所有ASCII字符。
如果要匹配
=或
-
则应转义减号。使用这个模式:<代码> [\\\= ] /代码>

< p>模式中间的“--”字符是导致问题的原因。在这样的字符组中,“-”字符是特殊的,它表示“之间的所有字符”。因此,“'-=”表示“从“'”到“=”的所有字符。碰巧“*”在该范围内


要解决此问题,请重新排列字符列表,使“-”位于末尾,或者用反斜杠引用它。

在regexp的字符序列中,-char有特殊含义

它创建了一个范围

[\'-=]表示接受\以及介于'和=

要指定-在字符序列中,必须将其放在末尾


[\'=-]会做你想做的。

我认为这是因为你必须转义'-',否则它就是范围(比如[A-Z])。

字符
-
用于指定集合中的范围,例如
[A-Z]
。你的集合匹配从
'
=/code>的任何字符,即所有字符
()*+,-./0123456789:;也要转义
-
字符…因此
-
实际上,它只意味着接受
'
=
-之间的所有字符,其中不包括“\“。在这种情况下,反斜杠将被解释为转义字符,即使转义
。只有GNU和POSIX风格将反斜杠用作文字反斜杠。在所有其他方面,包括javascript,
['=-]
都将执行与
[\'=-]
相同的操作。
[\'\-=]