为什么我的正则表达式不适用于这种特殊情况

时间:2016-09-21 13:16:40

标签: javascript regex

我希望在这些文字之间的“pw =”之后输出数字

例如

"blablabla pw=0.5 alg=blablalbala"

会让我0.5

我使用的正则表达式是:

/.*pw=+(.*)\s+alg=.*/g

在javascript的上下文中,我会在匹配函数中使用该正则表达式来获取数字:

str.match(/.*pw=+(.*)\s+alg=.*/g)

但是在regex101.com中,匹配和突出显示的结果根本不匹配(结果显示正则表达式是正确的而突出显示部分不是)

1 个答案:

答案 0 :(得分:3)

您应该删除/g全局修饰符,并建议将您的值匹配模式精确到[\d.]*

关键是当全局修饰符与String#match一起使用时,所有捕获的组值都将被丢弃。

使用像

这样的正则表达式
str.match(/\bpw=([\d.]*)\s+alg=/)
                 ^^^^^^        ^

请注意,在模式的开头和结尾不需要.*String#match不需要完整的字符串匹配(与Java中的String#matches()不同)。

var str = 'blablabla pw=0.5 alg=blablalbala';
var m = str.match(/\bpw=([\d.]*)\s+alg=/);
if (m) {
  console.log(m[1]);
}