JS split() 正则表达式与单个结果数组的三个匹配
JS split() Regex with Three Matches to a single Results Array
我正在尝试使用 split() 在 JS 中拆分以下类型的字符串。
let shape = "Cube - Level 2: three-dimensional";
我想要的最终状态是这样的:
0: "Cube"
1: "Level 2"
2: "three-dimensional"
我可以单独捕获 \s-\sLevel
模式之前的单词,并具有正面前瞻性:
(.+)(?=\s-\sLevel\s)
和带有简单捕获组的 Level\s[0-9]
模式:
(Level\s[0-9])
以及Level:\s
之后的任意字符:
(?<=[0-9]:\s).*
但我正在尝试弄清楚如何使用 JS split() 捕获所有三个。有没有办法捕获它们 split[0] = "Cube"
、split[1] = "Level 2"
等?
用字符 </code>、<code>:
、-
创建一个字符 class,然后拆分行中的 2 个或 3 个字符:
let shape = "Cube - Level 2: three-dimensional";
console.log(shape.split(/[ \-:]{2,3}/));
您可以在破折号(由 spaces 包围)和冒号后跟 space:
之间交替
let shape = "Cube - Level 2: three-dimensional";
console.log(
shape.split(/ - |: /)
);
如果您总是想将字符串拆分为这三个组,那么您可以 捕获 捕获组中的 Level
部分:
let shape = "Cube - Level 2: three-dimensional";
console.log(
shape.split(/ - (Level \d+): /)
);
如果您只想要一个使用 String.split()
的解决方案,那么我的回答是错误的,但是如果您正在寻找有关如何匹配字符串的问题的一般答案,那么我建议:
/^(.*?) - (Level (?:.*?)): (.*)$/.exec(str).slice(1)
因此,例如:
let str = "Tetra - hedron - whatever - you - like - Level 867-5309: three-dimensional"
console.log(/^(.*?) - (Level (?:.*?)): (.*)$/.exec(str).slice(1))
[ 'Tetra - hedron - whatever - you - like',
'Level 867-5309',
'three-dimensional' ]
我正在尝试使用 split() 在 JS 中拆分以下类型的字符串。
let shape = "Cube - Level 2: three-dimensional";
我想要的最终状态是这样的:
0: "Cube"
1: "Level 2"
2: "three-dimensional"
我可以单独捕获 \s-\sLevel
模式之前的单词,并具有正面前瞻性:
(.+)(?=\s-\sLevel\s)
和带有简单捕获组的 Level\s[0-9]
模式:
(Level\s[0-9])
以及Level:\s
之后的任意字符:
(?<=[0-9]:\s).*
但我正在尝试弄清楚如何使用 JS split() 捕获所有三个。有没有办法捕获它们 split[0] = "Cube"
、split[1] = "Level 2"
等?
用字符 </code>、<code>:
、-
创建一个字符 class,然后拆分行中的 2 个或 3 个字符:
let shape = "Cube - Level 2: three-dimensional";
console.log(shape.split(/[ \-:]{2,3}/));
您可以在破折号(由 spaces 包围)和冒号后跟 space:
之间交替let shape = "Cube - Level 2: three-dimensional";
console.log(
shape.split(/ - |: /)
);
如果您总是想将字符串拆分为这三个组,那么您可以 捕获 捕获组中的 Level
部分:
let shape = "Cube - Level 2: three-dimensional";
console.log(
shape.split(/ - (Level \d+): /)
);
如果您只想要一个使用 String.split()
的解决方案,那么我的回答是错误的,但是如果您正在寻找有关如何匹配字符串的问题的一般答案,那么我建议:
/^(.*?) - (Level (?:.*?)): (.*)$/.exec(str).slice(1)
因此,例如:
let str = "Tetra - hedron - whatever - you - like - Level 867-5309: three-dimensional"
console.log(/^(.*?) - (Level (?:.*?)): (.*)$/.exec(str).slice(1))
[ 'Tetra - hedron - whatever - you - like',
'Level 867-5309',
'three-dimensional' ]