我做了
temp = '(test)';
temp.match(temp);
然后回来了
0:'test'
1:'test'
括号去哪儿了?
更新:
在 regexpal.com 中测试并发现类似。
但是,切换到 {} 并没有同样的问题。
澄清
temp 是“打算”成为一个字符串。不知道为什么它会被认为是别的东西。
我做了
temp = '(test)';
temp.match(temp);
然后回来了
0:'test'
1:'test'
括号去哪儿了?
更新:
在 regexpal.com 中测试并发现类似。
但是,切换到 {} 并没有同样的问题。
澄清
temp 是“打算”成为一个字符串。不知道为什么它会被认为是别的东西。
括号是正则表达式中的元字符(特别是捕获括号)(请注意,如果将字符串传递给match
方法,它将隐式转换为正则表达式)。如果您希望它们按字面意思理解,则必须对其进行转义(因为您正在处理一个字符串,所以您还必须转义转义字符,以便在转换为正则表达式时它仍然存在......到那时正则表达式不会匹配原始字符串)。
to 的参数.match()
被视为正则表达式。括号是在该上下文中表示某些东西的元字符。具体来说,它们对匹配字符串的部分进行分组。因此,您的正则表达式(test)
匹配子字符串“test”。返回值将整个匹配项作为数组的第一个元素,将第一个组作为第二个元素。在这种情况下,因为您的组覆盖了整个匹配的子字符串,所以它们是相同的。
这是MDN 文档可以快速澄清的事情:
参数
regexp
一个正则表达式对象。如果传递了一个非正则表达式对象 obj,它会通过使用 new RegExp(obj) 隐式转换为正则表达式。
你必须这样做:
temp = '\(test\)';
temp.match(temp);
由于 () 在正则表达式中定义组。在这里查看更多信息:http ://www.regular-expressions.info/brackets.html
() 是正则表达式使用的字符。就像 .*[] 等。这就是它不返回 () 的原因。我在上面的例子中所做的就是逃避它们。因此,正则表达式不会将其视为一个分组。
更新:
它确实以这种方式工作:
"(test)".match(/\(test\)/);
当您创建一个字符串并拥有一个不同的正则表达式对象时。