Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的正则表达式在这种特殊情况下不起作用_Javascript_Regex - Fatal编程技术网

Javascript 为什么我的正则表达式在这种特殊情况下不起作用

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中,匹配和高亮显示的结果根本不匹配(结果显示正则表达式是正确的,而高亮显示部分不是)您应该删除/

我想在这些文本之间的“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中,匹配和高亮显示的结果根本不匹配(结果显示正则表达式是正确的,而高亮显示部分不是)

您应该删除
/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网站上查看更多信息。