讨厌和怪异的正则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