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

时间:2012-02-15 13:43:14

标签: javascript regex

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

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

接受角色*。 ('-=也被接受,但这是预期的。)

我们可以用任何字符替换'='。如果我们更改模式字符顺序,它就不再起作用了。

有人对此有所了解吗?

5 个答案:

答案 0 :(得分:10)

模式中间的“ - ”字符是造成问题的原因。 “ - ”字符在这样的字符组中是特殊的,它意味着“所有字符之间”。因此,“' - =”表示“所有字符来自”“到”=“。”恰好“*”在该范围内。

要修复它,请重新排序字符列表,以便“ - ”结尾,或者用反斜杠引用它。

答案 1 :(得分:5)

因为在这种情况下-表示范围。在ASCII表中,*位于'=之间。您的pattenr还将匹配'=之间的所有其他字符(例如数字)。您可以找到所有ASCII字符here 如果您想匹配' =-,您应该逃避减号。使用此模式:[\'\-=]

答案 2 :(得分:4)

- char在regexp中的char序列中具有特殊含义。

它会创建一个范围

[\' - =]表示接受\和'和=

之间的所有字符

指定 - 在char序列中,你必须把它放在最后

[\'= - ]将会有所期待。

答案 3 :(得分:4)

我认为这是因为你必须逃避' - ',否则它的范围(如[A-Z])。

答案 4 :(得分:4)

-字符用于指定集合中的范围,例如[a-z]。您的设置会匹配'=中的所有字符,即所有字符'()*+,-./0123456789:;<=

你必须逃避-才能按字面意思使用它:

[\'\-=]