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