代码之家  ›  专栏  ›  技术社区  ›  Googlebot

用regex分隔起始数字

  •  0
  • Googlebot  · 技术社区  · 6 年前

    我想将字符串的起始数字分隔为

    01.text
    2 - something
    3 more
    

    得到

    array (
    [0] => 01.text
    [1] => 01
    [2] text
    )
    array (
    [0] => 2 - something
    [1] => 2
    [2] something
    )
    array (
    [0] => 3 more
    [1] => 3
    [2] more
    )
    

    我尝试了一种雷吉士模式

    ^(\d+)\.+|\s+|-+(.*?)
    

    但并不像我想象的那样有效。

    我的问题是如何匹配 . - 数字后有或没有空格。

    2 回复  |  直到 6 年前
        1
  •  1
  •   The fourth bird    6 年前

    您的regex使用了一个替换,它将匹配捕获组中的一个或多个数字,后跟一个点或一个空白字符,或者 | 在一个组中,任何零次或多次非贪婪的字符。

    您可以更新regex以不使用替换项 γ 使第二组量词贪婪。

    在第一个组中,捕获一个或多个数字,然后在字符类中匹配您的字符,随后是另一个捕获组,该捕获组将匹配一个或多个任何字符:

    ^(\d+)[.\s-]+(.+)

    Demo

        2
  •  1
  •   Guilherme Baule    6 年前

    最好给要拆分的字符串指定一个模式。我知道有时候不可能。所以,这个regex与所有情况都匹配,并为您提供所需的数组

    /^(\d+)[\.\-\s]*(.*)?$/

    let rows = [
      "01.text",
      "2 - something",
      "3 more"
    ];
    let regex = /^(\d+)[\.\-\s]*(.*)?$/;
    
    for(let row of rows) {
      console.log(regex.exec(row))
    }

    无论如何,如果您知道文件中有更多分隔符,请添加到[\.\-\s]。*