讨厌和怪异的正则expression式问题:'io \'。 得到一个匹配的单词“function”
从节点REPL的东西,
> 'function'.search('io\.') 5
我真的需要它只匹配“io”。 而不是“function”或任何与“io”在中间的东西…
更奇怪的事情:
> 'io'.search('io\.') -1 > 'ion'.search('io\.') 0
所以看来我不是逃避点字符..? 但我与“\”…对不对? 我在http://www.regextester.com/和http://regexpal.com/上都testing过,它的工作原理是我认为它应该可以工作的。
我究竟做错了什么 ? 在node.js中的正则expression式的东西有点不同,然后我习惯了吗?
编辑1:在谷歌浏览器的JavaScript控制台我也可以
'function'.search('io\.') 5
所以这可能是一个V8的事情…对不对?
编辑2:我从Firefox的JavaScript控制台得到相同的结果,所以它不是一个V8的事情…这里发生了什么? 我真的很困惑
你的正则expression式是正确的,但是你必须把它编码成一个string。 所以,你的(正确)正则expression式看起来像这样:
io\.
但是,反斜杠也是一个string转义字符。 为了创build一个包含该正则expression式的string,你必须避开反斜线:
'io\\.'
你写它的方式,string实际上包含io.
,它正确地匹配function
。
这里的问题是反斜杠被用作两个级别的转义字符:string文字和正则expression式。 例如'\\'
是包含单个反斜杠的string(如果您将其input到REPL中,则可以看到该string)。
有两个选项:
-
逃避反斜杠:
'\\.'
是包含反斜杠和点的string,这是一个匹配点的正则expression式。 -
使用正则expression式:/
/io\./
> 'function'.search(/\./) -1