我在这里找不到问题,无论我尝试什么,我都不明白结果
我在脚本中有这个:
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 代码。始终采用相同的格式,只是更改了数字。
在我尝试过的每个正则表达式测试器上,结果都符合预期,它在匹配 [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 中的斜杠就可以了。我虽然该模式按字面意思传递给了未解释的 regexp 对象,但那是我的问题。
最佳答案
问题是 \d
。将其更改为 \\d
,或使用斜线分隔正则表达式:
var regex = /(\d*(?=,))/i;
关于javascript - JS 中的这个正则表达式返回了一个意外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509952/