我需要将一个字符串拆分成单个单词,但有些情况不应该拆分。
An example for type I string
An example for degree II string
所以每type
| degree
+ I
| II
| III
| IV
| V
应保留为字符串
示例字符串的结果应为
['An', 'example', 'for', 'type I', 'string']
['An', 'example', 'for', 'degree II', 'string']
在我的正则表达式中,我必须搜索type
或degree
,然后搜索空格,后跟字符串I
或V
,最大长度为3。
那些比赛不应该被分割。
consr regex = '/(type|degree)\s(I{1,3}|V{1})/' // <-- regEx is wrong as it is not working
const result = string.split(' ')
我不太确定如何结合使用正则表达式进行拆分,所有匹配都是按空格字符拆分的例外。
答案 0 :(得分:2)
您可以匹配单词type
和degree
,后跟任意罗马数字或任何1个非空白字符
var s = "An example for degree II string";
var rx = /\b(?:type|degree)\s+M{0,4}(?:C[MD]|D?C{0,3})(?:X[CL]|L?X{0,3})(?:I[XV]|V?I{0,3})\b|\S+/g;
console.log(s.match(rx));
&#13;
我借用并缩短了Roman number regex from here。模式匹配
\b
- 字边界(?:type|degree)
- 与type
或degree
子字符串匹配的非捕获组\s+
- 一个或多个空格M{0,4}(?:C[MD]|D?C{0,3})(?:X[CL]|L?X{0,3})(?:I[XV]|V?I{0,3})
- Roman number regex \b
- 一个尾随字边界(这将确保至少有1个罗马数字)|
- 或\S+
- 一个或多个非空白字符。 注意如果degree
或type
字词前面有任何符号或标点字符,则会与\S+
分支匹配,所以你需要在应用这个正则表达式之前处理这些情况。