逗号分隔字符串 with/without 空格的正则表达式

Regex for comma separated string with/without spaces

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

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

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

Note: implements word can be anything like extend/union/intersection etc.

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

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

满足这两种情况的正则表达式是什么?帮助将不胜感激。

JSFiddle here

检查字符串后面是否有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 "]

您可以使用

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

参见regex demo

详情

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

JS 演示:

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);