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