JS / RegEx:将字符串拆分为单词但使用异常正则表达式

时间:2017-09-20 08:16:50

标签: javascript regex split

我需要将一个字符串拆分成单个单词,但有些情况不应该拆分。

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']

在我的正则表达式中,我必须搜索typedegree,然后搜索空格,后跟字符串IV,最大长度为3。 那些比赛不应该被分割。

consr regex = '/(type|degree)\s(I{1,3}|V{1})/' // <-- regEx is wrong as it is not working
const result = string.split(' ')

我不太确定如何结合使用正则表达式进行拆分,所有匹配都是按空格字符拆分的例外。

1 个答案:

答案 0 :(得分:2)

您可以匹配单词typedegree,后跟任意罗马数字或任何1个非空白字符

&#13;
&#13;
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;
&#13;
&#13;

我借用并缩短了Roman number regex from here。模式匹配

  • \b - 字边界
  • (?:type|degree) - 与typedegree子字符串匹配的非捕获组
  • \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+ - 一个或多个非空白字符。

注意如果degreetype字词前面有任何符号或标点字符,则会与\S+分支匹配,所以你需要在应用这个正则表达式之前处理这些情况。