Javascript 为什么我的正则表达式在这种特殊情况下不起作用
我想在这些文本之间的“pw=”后面找出数字 比如说Javascript 为什么我的正则表达式在这种特殊情况下不起作用,javascript,regex,Javascript,Regex,我想在这些文本之间的“pw=”后面找出数字 比如说 "blablabla pw=0.5 alg=blablalbala" 我会得到0.5分 我使用的正则表达式是: /.*pw=+(.*)\s+alg=.*/g 在javascript的上下文中,我将使用该regex In match函数来获取数字: str.match(/.*pw=+(.*)\s+alg=.*/g) 但是在regex101.com中,匹配和高亮显示的结果根本不匹配(结果显示正则表达式是正确的,而高亮显示部分不是)您应该删除/
"blablabla pw=0.5 alg=blablalbala"
我会得到0.5分
我使用的正则表达式是:
/.*pw=+(.*)\s+alg=.*/g
在javascript的上下文中,我将使用该regex In match函数来获取数字:
str.match(/.*pw=+(.*)\s+alg=.*/g)
但是在regex101.com中,匹配和高亮显示的结果根本不匹配(结果显示正则表达式是正确的,而高亮显示部分不是)您应该删除
/g
全局修饰符,我建议将您的值匹配模式精确到[\d.]*
关键是,当全局修饰符与String#match
一起使用时,所有捕获的组值都将被丢弃
使用类似正则表达式的正则表达式
str.match(/\bpw=([\d.]*)\s+alg=/)
^^^^^^ ^
请注意,您不需要在模式的开头和结尾使用*
,String#match
不需要完整的字符串匹配(与Java中的String#matches()
不同)
var str='blabla pw=0.5 alg=blablalbala';
var m=str.match(/\bpw=([\d.]*)\s+alg=/);
如果(m){
console.log(m[1]);
}
摆脱g
后缀也可以变得更通用,例如:/\bpw=(\S*)/
,或者匹配以后要分析的对:/\b([^\S=]+)=(\S*)/
,然后循环可以从中构建关联数组。@IsmaelLuceno:是的,我们可以进一步增强这个表达式,比如,对像[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
这样的数字使用更精确的正则表达式,而不是[\d.]
,然后将\s+alg=
转到\s+\w+=
,或(?:\s+\w+=\s*/)
。。。我们只是没有关于上下文的更多细节,以及输入是否经过预验证。在您的代码中,这是否意味着在m的第一个位置,还有其他内容?因为当我在javascript中使用str.match()时,它返回一个数组,其中1个是“pw=0.8 alg=”。我不理解whysting.match与非全局正则表达式一起返回一个数组,其中第一个元素是整个匹配项。然后遵循捕获的值(如果有)。在MDN网站上查看更多信息。