【问题标题】:Regex match from digit to digit?正则表达式从数字到数字匹配?
【发布时间】:2022-01-25 12:47:46
【问题描述】:

有没有办法从一个数字到另一个数字进行正则表达式?

我有这个曲目列表:

01. Intro 02. Waage 03. Hyänen (feat. Samra) 04. Ich will es bar (feat. Haftbefehl) 05. Am Boden bleiben (feat. Casper & Montez) 06. Panzerglas (feat. Face) 07. Sobald Du gehst 08. 90’s (feat. Olson) 09. Erzähl‘ mir nix (feat. Nio) 10. Dope & 40s 11. Lila (feat. Bosca) 12. Wo ich wohn‘ 13. Bahnen 14. 200K

我试图用/\d\d([^\d]*)/g 将其拆分为对象。但我得到了结果:

0: ""
1: ". Intro "
2: ""
3: ". Waage "
4: ""
5: ". Hyänen (feat. Samra) "
6: ""
7: ". Ich will es bar (feat. Haftbefehl) "
8: ""
9: ". Am Boden bleiben (feat. Casper & Montez) "
10: ""
11: ". Panzerglas (feat. Face) "
12: ""
13: ". Sobald Du gehst "
14: ""
15: ". "
16: ""
17: "’s (feat. Olson) "
18: ""
19: ". Erzähl‘ mir nix (feat. Nio) "
20: ""
21: ". Dope & "
22: ""
23: "s "
24: ""
25: ". Lila (feat. Bosca) "
26: ""
27: ". Wo ich wohn‘ "
28: ""
29: ". Bahnen "
30: ""
31: ". "
32: ""
33: ""
34: "0K"

我如何包含数字01 0203...以及标题轨道为200k的轨道14这样的情况有哪些可能性?

【问题讨论】:

  • 试试这个/\D(?=\d+\.\s)/g

标签: javascript regex


【解决方案1】:

你可以使用

text.split(/\s+(?=\d+\.\s)/)

请参阅regex demo详情

  • \s+ - 一个或多个空格
  • (?=\d+\.\s) - 一个正向前瞻,需要一个或多个数字,. 和一个紧挨当前位置右侧的空格。

查看 JavaScript 演示:

const text = "01. Intro 02. Waage 03. Hyänen (feat. Samra) 04. Ich will es bar (feat. Haftbefehl) 05. Am Boden bleiben (feat. Casper & Montez) 06. Panzerglas (feat. Face) 07. Sobald Du gehst 08. 90’s (feat. Olson) 09. Erzähl‘ mir nix (feat. Nio) 10. Dope & 40s 11. Lila (feat. Bosca) 12. Wo ich wohn‘ 13. Bahnen 14. 200K";
text.split(/\s+(?=\d+\.\s)/).forEach( x =>
  console.log(x))

如果您需要确保项目符号编号是递增的,则需要将代码调整为

const text = "01. Intro containing 26. chars 02. Waage 03. Hyänen (feat. Samra) 04. Ich will es bar (feat. Haftbefehl) 05. Am Boden bleiben (feat. Casper & Montez) 06. Panzerglas (feat. Face) 07. Sobald Du gehst 08. 90’s (feat. Olson) 09. Erzähl‘ mir nix (feat. Nio) 10. Dope & 40s 11. Lila (feat. Bosca) 12. Wo ich wohn‘ 13. Bahnen 14. 200K";
var chunks = text.split(/\s+(?=\d+\.\s)/)
chunks = chunks.reduce(
    function(acc, currentValue, index) {
      if (index>0) {
        const num = Number(currentValue.match(/^\d+/)[0])
        if (num - num_prev === 1) {
            acc.push(currentValue); num_prev = num;
        } else {
            acc[acc.length-1] += ` ${currentValue}`;
        }
        return acc;
      } else {
          acc = [currentValue]; num_prev = 1;
          return acc;
      }
    }, [])
chunks.forEach( x =>
  console.log(x))

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多