3

我意识到我无法将空的正则表达式与/(regex here)/语法匹配,因为//它是一个注释。

'this is a test'.match(//)
> SyntaxError: Unexpected token }

所以,我试过new RegExp('')了,它奏效了:

'this is a test'.match(new RegExp(''))
> [""]

但是当我检查 的输出时new RegExp(''),是这样的:

new RegExp('')
> /(?:)/

为什么是这样?(我使用的是 Chrome 版本26.0.1410.64 (Official Build 193017) m,这是在 JavaScript 控制台中)

4

1 回答 1

3

这在 ECMA 标准第7.8.5节中指定:

正则表达式字面量不能为空;// 字符不是表示一个空的正则表达式文字,而是开始一个单行注释。要指定一个空的正则表达式,请使用:/(?:)/。

此外,在15.10.4.1规范中指出:

如果 P 是空字符串,则可以通过让 S 为“(?:)”来满足此规范。

于 2013-05-17T01:39:38.197 回答