令人烦恼和奇怪的正则表达式问题:'io \。'得到一个关于'功能'这个词的匹配

时间:2011-05-21 17:30:01

标签: javascript regex node.js escaping

从节点REPL中,

> 'function'.search('io\.')
5

我真的需要它才能匹配“io”。而不是“功能”或中间只有“io”的任何东西......

更奇怪的事情:

> 'io'.search('io\.')
-1
> 'ion'.search('io\.')
0

所以看来我没有逃脱点角色..?但我和“\”......对吗?我在http://www.regextester.com/http://regexpal.com/上对它进行了测试,它的工作方式与我认为应该有效的方式相同。

我做错了什么? node.js中的正则表达式与我习惯的有些不同吗?

EDIT1:在Google Chrome的javascript控制台中,我也得到了

'function'.search('io\.')
5

所以它可能是一个v8的东西......对吧?

EDIT2:我从Firefox的javascript控制台得到了相同的结果,所以它不是v8的东西......这里发生了什么?我真的很困惑......

2 个答案:

答案 0 :(得分:8)

你的正则表达式是对的,但是你必须对它进行编码以便将它放在一个字符串中。 所以,你的(正确的)正则表达式看起来像这样:

io\.

但是,反斜杠也是字符串转义字符。要创建包含该正则表达式的字符串,您必须转义反斜杠:

'io\\.'

您编写它的方式,该字符串实际上包含io.,正确匹配function

答案 1 :(得分:6)

这里的问题是反斜杠在两个级别用作转义字符:字符串文字和正则表达式。例如,'\\'是包含单个反斜杠的字符串(如果在REPL中键入,则可以看到)。

有两种选择:

  • 转义反斜杠:'\\.'是包含反斜杠和点的字符串,这是一个与点匹配的正则表达式。

  • 使用正则表达式文字:/io\./

    > 'function'.search(/\./)
    -1