1

我在这里找不到问题,不管我尝试什么,我不明白结果

我在脚本中有这个:

var pattern = "(\d*(?=,))";
var regex = new RegExp( pattern, "i" );
var string_to_match = "[\w\s-]{3,}";
var match = regex.exec( string_to_match );
alert( match.length ); --> prints 2
alert( typeof( match )); --> prints object

alert( match[0] ); --> prints nothing, or empty space
alert( match[0].length ); --> prints 0
alert( typeof( match[0] )); --> prints string

alert( match[1] ); --> prints nothing, or empty space
alert( match[1].length ); --> prints 0
alert( typeof( match[1] )); --> prints string

这只是我正在做的测试的最后一个版本。在实际/最终脚本中,要匹配的字符串来自 HTML 代码。始终采用相同的格式,只是更改数字。

在我尝试过的每个正则表达式测试器上,结果都符合预期,它带有 match[0] 中的数字

那么,我做错了什么?我在这里想念什么?

回答后更新:

使用以下组合,按预期工作

var regex = /(\d*(?=,))/i;

使用以下组合,按预期工作

var pattern = "(\\d*(?=,))";
var regex = new RegExp( pattern, "i" );

使用下面的组合,它不起作用

var pattern = "/(\d*(?=,))/";
var regex = new RegExp( pattern, "i" );

因此,仅添加斜杠作为分隔符是行不通的。我在最初的尝试中尝试过,因为我习惯于 PHP 中的正则表达式。转义 \d 中的斜线就可以了。我虽然该模式被逐字传递给未解释的正则表达式对象,但这是我的问题。

4

1 回答 1

4

问题是\d. 将其更改为\\d,或使用斜杠来分隔正则表达式:

var regex = /(\d*(?=,))/i;
于 2013-07-07T07:00:35.070 回答