在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

    09-25 16:49
    查看更多