Javascript 正则表达式接受*而不在模式中指定它
在开发JavaScript正则表达式时,我们发现了一些奇怪的行为 对于以下模式:Javascript 正则表达式接受*而不在模式中指定它,javascript,regex,Javascript,Regex,在开发JavaScript正则表达式时,我们发现了一些奇怪的行为 对于以下模式:[\'-=] 接受字符*。(”,-,=也被接受,但这是预期的。) 我们可以用任何字符替换“=”。如果我们改变模式字符顺序,它就不再工作了 有人知道这个吗?因为在这种情况下,-表示范围。在ASCII表格中,*介于'和=之间。您的模式还将匹配'和=之间的所有其他字符(例如数字)。您可以找到所有ASCII字符。 如果要匹配”=或-则应转义减号。使用这个模式: [\\\= ] /代码> < p>模式中间的“--”字符是导致
[\'-=]
接受字符*
。(”
,-
,=
也被接受,但这是预期的。)
我们可以用任何字符替换“=”。如果我们改变模式字符顺序,它就不再工作了
有人知道这个吗?因为在这种情况下,
-
表示范围。在ASCII表格中,*
介于'
和=
之间。您的模式还将匹配'
和=
之间的所有其他字符(例如数字)。您可以找到所有ASCII字符。如果要匹配
”
=或-
则应转义减号。使用这个模式:<代码> [\\\= ] /代码> < p>模式中间的“--”字符是导致问题的原因。在这样的字符组中,“-”字符是特殊的,它表示“之间的所有字符”。因此,“'-=”表示“从“'”到“=”的所有字符。碰巧“*”在该范围内
要解决此问题,请重新排列字符列表,使“-”位于末尾,或者用反斜杠引用它。在regexp的字符序列中,-char有特殊含义 它创建了一个范围 [\'-=]表示接受\以及介于'和= 要指定-在字符序列中,必须将其放在末尾
[\'=-]会做你想做的。我认为这是因为你必须转义'-',否则它就是范围(比如[A-Z])。字符
-
用于指定集合中的范围,例如[A-Z]
。你的集合匹配从'
到=/code>的任何字符,即所有字符()*+,-./0123456789:;也要转义-
字符…因此-
实际上,它只意味着接受'
和=
-之间的所有字符,其中不包括“\“。在这种情况下,反斜杠将被解释为转义字符,即使转义”
。只有GNU和POSIX风格将反斜杠用作文字反斜杠。在所有其他方面,包括javascript,['=-]
都将执行与[\'=-]
相同的操作。
[\'\-=]