在javascript中,我正在通过正则表达式对下面的字符串使用split方法,但是在javascript代码中无法正常工作,我也在一些在线正则表达式测试器网站(如RegExr)上对其进行了测试,并且效果很好!
字符串:"$1 $2 $3 $5 $7 hello"
。
结果:["","$7 ","hello"]
预期结果:["hello"]
这是我的代码:online example!
function myFunction() {
var str = "$1 $2 $3 $5 $7 hello";
var res = str.split(/([$][0-9]+[ ]*)+/gu);
document.getElementById("demo").innerHTML = res;
}
<p>Click the button to display the array value after the split.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
我该如何解决?
最佳答案
捕获组使正则表达式引擎将捕获的值放回到结果数组中。此外,还添加了一个空元素,该空元素将导致字符串的开始与其相邻的匹配。
您可以使用non-capturing group并随后删除空项目:
var str = "$1 $2 $3 $5 $7 hello";
console.log(str.split(/\s*(?:\$\d+\s*)+/).filter(Boolean));
模式详细信息
\s*
-0+空格(?:\$\d+\s*)+
-1次或多次\$
-一个$
符号\d+
-1个以上数字\s*
-0+空格。 见regex demo