0

我做了

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

然后回来了

0:'test'
1:'test'

括号去哪儿了?

更新:

在 regexpal.com 中测试并发现类似。

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

澄清

temp 是“打算”成为一个字符串。不知道为什么它会被认为是别的东西。

4

3 回答 3

2

括号是正则表达式中的元字符(特别是捕获括号)(请注意,如果将字符串传递给match方法,它将隐式转换为正则表达式)。如果您希望它们按字面意思理解,则必须对其进行转义(因为您正在处理一个字符串,所以您还必须转义转义字符,以便在转换为正则表达式时它仍然存在......到那时正则表达式不会匹配原始字符串)。

于 2013-04-07T16:38:47.507 回答
1

to 的参数.match()被视为正则表达式。括号是在该上下文中表示某些东西的元字符。具体来说,它们对匹配字符串的部分进行分组。因此,您的正则表达式(test)匹配子字符串“test”。返回值将整个匹配项作为数组的第一个元素,将第一个组作为第二个元素。在这种情况下,因为您的组覆盖了整个匹配的子字符串,所以它们是相同的。

这是MDN 文档可以快速澄清的事情:

参数

regexp
一个正则表达式对象。如果传递了一个非正则表达式对象 obj,它会通过使用 new RegExp(obj) 隐式转换为正则表达式。

于 2013-04-07T16:39:17.480 回答
0

你必须这样做:

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

由于 () 在正则表达式中定义组。在这里查看更多信息:http ://www.regular-expressions.info/brackets.html

() 是正则表达式使用的字符。就像 .*[] 等。这就是它不返回 () 的原因。我在上面的例子中所做的就是逃避它们。因此,正则表达式不会将其视为一个分组。

更新:

它确实以这种方式工作:

"(test)".match(/\(test\)/);

当您创建一个字符串并拥有一个不同的正则表达式对象时。

于 2013-04-07T16:38:36.267 回答