在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>
我该如何解决?
答案 0 :(得分:6)
捕获组使正则表达式引擎将捕获的值放回结果数组中。此外,还添加了一个空元素,它导致字符串的开头和旁边的匹配。
您可以使用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
答案 1 :(得分:1)
function myFunction() {
var str = "$1 $2 $3 $5 $7 hello $5";
var subst = ``;
var res= str.replace(/([$][0-9]?.)/gu, subst);
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>