用正则表达式分隔起始数字

Separating starting digits with regex

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

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+|-+(.*?)

但没有像我预期的那样工作。

我的问题是如何匹配 .- 与或不与数字后的 space。

您的正则表达式使用交替匹配捕获组中一个或多个数字后跟一个点或空白字符或|组中任何字符零次或多次非贪婪。

您可以更新您的正则表达式以不使用交替 | 并使第二组中的量词变得贪婪。

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

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

Demo

最好尝试为要拆分的字符串指定一个模式。我知道有时这是不可能的。所以,这个正则表达式匹配所有情况并给你你想要的数组

/^(\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]*