JavaScript正精通

我想了解正则表达式程序如何处理搜索的特殊字符的文字。这是我能想到的最简单的例子来说明我的问题。

我正在寻找一个文字。在一个字符串
当我做JavaScript正精通

'sp.o'.search('.') 

//it returns 0 which makes sense.

然后我读了MDN,并根据他们

'sp.o'.search('\.') 

// it returns 0 !

// I come from vim flavor regex

// It does not make sense to me =(

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

'sp.o'.search('\\.') 

// returns 2 !

// the correct out put I am looking for

赫克我错过了什么! (此行为是无论是在谷歌Chrome和我的NodeJS没有尝试过任何别的地方!)

回答:

因为它的字符串,\意味着你想逃避下一个字符。但.不是一个特殊的字符串字符,所以它只是将其视为文字。

"\." === "." 

你想逃避斜线(\)不是时期,这就是为什么"\\."产生的文本字符串\.这是你想要的。或者更明确地:

"\\" + "." === "\\." // or a literal: \.

但其他职位是正确的,你可能只是想使用正则表达式的文字,而不是解析字符串的正则表达式。

回答:

您没有使用正则表达式,但字符串。用途:

/regexphere/ 

它的工作原理:

'sp.o'.search(/\./); // 2 

但在你的情况,.indexOf是你的朋友:

'sp.o'.indexOf('.'); // 2 

回答:

您正在使用的字符串,而不是一个表达式搜索。试试这个:

'sp.o'.search(/\./); // should return 2 

回答:

你的用法几乎是正确的。正如其他人所指出的,你可以使用正则表达式文字而不是字符串。但字符串也起作用。根据Mozilla docs上的搜索方法,包括:

如果非RegExp对象OBJ通过,它是隐式通过使用正则表达式的新(OBJ)转换为正则表达式。

原因'\\.'作品和'\.'不会是因为在JavaScript字符串必须转义反斜线为它是一个反斜杠。否则,它总是试图逃避它前面的角色。在这种情况下,'.'不逃避任何东西。如果您在JavaScript控制台评估你的字符串,你会得到这样的:那么

'\.' // => '.' 

'\\.' // => '\.'

该字符串将被传递给幕后RegExp对象。如果你这样做你自己,这是你会得到什么:

new RegExp('\.') // => /./ 

new RegExp('\\.') // => /\./

其他人使用正则表达式文字(例如/\./),而不是一个字符串作为参数传递给.search建议。这两个工作,但我想,因为它是比较明显的,有点漂亮使用正则表达式文字。

回答:

如果你只是寻找一个固定的文字,为什么不使用:

if('sp.o'.indexOf('.') !== -1) ... 

正则表达式总是比一个字符串搜索更昂贵。

以上是 JavaScript正精通 的全部内容, 来源链接: utcz.com/qa/265850.html

回到顶部