【问题标题】:The split string by regex does not work fine in javascript正则表达式的拆分字符串在 javascript 中无法正常工作
【发布时间】:2018-12-03 09:27:12
【问题描述】:

在 javascript 中,我通过正则表达式对下面的字符串使用拆分方法,但它在 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>

我该如何解决?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    捕获组使正则表达式引擎将捕获的值放回结果数组中。此外,还添加了导致字符串开头与其旁边的匹配匹配的空元素。

    您可以使用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

    【讨论】:

      【解决方案2】:

      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>

      【讨论】:

      • 它也会完全捕获Hello $1 test $2 $3。我猜不是 OP 想要的
      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多