带有/不带空格的逗号分隔字符串的正则表达式

时间:2018-04-05 13:59:10

标签: javascript regex regex-group

我想创建一个正则表达式,我想要提取满足模式的字符串。

输入字符串可以以下面两种可能的方式出现

  1. type MyClass inherits SomeClass,SomeOtherClass implements Node
  2. type MyClass inherits SomeClass, SomeOtherClass implements Node
  3.   

    注意:实现单词可以是extend / union / intersection等。

    正则表达式应该从上面的输入字符串中提取"inherits SomeClass, SomeOtherClass"字符串。

    我尝试了多个SO答案和不同的在线资源,但无法获得相同的成功。我使用的/inherits\s(.*?)\s/mg仅适用于第一种情况。

    满足这两种情况的正则表达式是什么?帮助将是欣赏。

    JSFiddle here

2 个答案:

答案 0 :(得分:1)

检查字符串后面是implements

var regex = /inherits\s+(.*)\s+(?=implements?)/mg;

var str1 = "type MyClass inherits SomeClass,SomeOtherClass implements Node";
var str2 = "type MyClass inherits SomeClass, SomeOtherClass implements Node";

str1.match( regex ) //["inherits SomeClass,SomeOtherClass "]

str2.match( regex ) //["inherits SomeClass, SomeOtherClass "]

答案 1 :(得分:1)

您可以使用

/inherits\s+\w+(?:\s*,\s*\w+)*/g

请参阅regex demo

<强>详情

  • inherits - 文字子字符串
  • \s+ - 1+空格
  • \w+ - 1个字母字母(字母,数字或下划线)
  • (?:\s*,\s*\w+)* - 零次或多次(*)次出现:
    • \s*,\s* - 包含0 +空格字符的,
    • \w+ - 1 + word chars

JS演示:

&#13;
&#13;
var regex = /inherits\s+\w+(?:\s*,\s*\w+)*/g;

var input1 = "type MyClass inherits SomeClass,SomeOtherClass implements Node";
var input2 = "type MyClass inherits SomeClass, SomeOtherClass implements Node";

var result1 = input1.match(regex);
var result2 = input2.match(regex);

document.write("result 1: "+ result1);
document.write("<br>")
document.write("\n result 2: "+ result2);
&#13;
&#13;
&#13;