具有两个独特要求的正则表达式

时间:2019-06-05 22:07:41

标签: regex

我想要一个与以下字符串匹配的正则表达式:

"( one , two,three ,four, '')"

并提取以下内容:

"one"
"two"
"three"
""

可以有任意多个元素。正则表达式:

"\[a-zA-Z\]+|(?<=')\\s*(?=')"

可以工作,但是我正在使用的库与环顾断言不兼容。

我有什么选择吗?

1 个答案:

答案 0 :(得分:1)

此表达式可能会捕获我们可能要在此处提取的内容:

(\s+)?([A-Za-z]+)(\s+)?|'(.+)?'

我们可能不希望其他界限,而我们期望的输出在这两组中:

([A-Za-z]+)
(.+)

Demo

RegEx电路

jex.im可视化正则表达式:

enter image description here

测试

const regex = /(\s+)?([A-Za-z]+)(\s+)?|'(.+)?'/gm;
const str = `"( one , two,three ,four, '')"`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}