概念 - 为什么match()看似剥离括号?

时间:2013-04-07 16:36:57

标签: javascript

我做了

temp = '(test)';
temp.match(temp);

然后回来了

0:'test'
1:'test'

括号在哪里?

更新

在regexpal.com上测试并发现类似的内容。

但是,切换到{}没有同样的问题。

澄清

temp“意图”成为一个字符串。不知道为什么它会被认为是别的。

3 个答案:

答案 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\)/);

创建字符串并具有不同的正则表达式对象时。