从节点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的东西......这里发生了什么?我真的很困惑......
答案 0 :(得分:8)
你的正则表达式是对的,但是你必须对它进行编码以便将它放在一个字符串中。 所以,你的(正确的)正则表达式看起来像这样:
io\.
但是,反斜杠也是字符串转义字符。要创建包含该正则表达式的字符串,您必须转义反斜杠:
'io\\.'
您编写它的方式,该字符串实际上包含io.
,正确匹配function
。
答案 1 :(得分:6)
这里的问题是反斜杠在两个级别用作转义字符:字符串文字和正则表达式。例如,'\\'
是包含单个反斜杠的字符串(如果在REPL中键入,则可以看到)。
有两种选择:
转义反斜杠:'\\.'
是包含反斜杠和点的字符串,这是一个与点匹配的正则表达式。
使用正则表达式文字:/io\./
> 'function'.search(/\./)
-1