我有一个类似
的字符串"Neo,Man,Cred,'Tred,Man,Ship',Manu"
现在我正在使用以下正则表达式
(,)(?=(?:[^']|'[^']*')*$)
用于捕获组但是将其捕获为
Neo
Man
Cred
'Tred,Man,Ship'
Manu
我想要实现的是仅使用regex从字符串中删除'
(单引号)。如何实现?
答案 0 :(得分:0)
您可以使用exec
:
s = "Neo,Man,Cred,'Tred,Man,Ship',Manu";
r = /'(.*?)'|(\w+)/g;
matches = [];
var match;
while (match = r.exec(s)) {
matches.push(match[1] || match[2]);
}
然而,正如另一个人提到的那样,使用更简单的正则表达式,没有循环逻辑,并在之后删除引号也同样有意义:
r2 = /'.*?'|\w+/g;
s.match(r2) . map(match => match.replace(/^'|'$/g, ''));
使用单个正则表达式无法执行此操作的原因是match
返回完整匹配的数组,忽略捕获组。要创建不带引号的带引号子字符串的完全匹配,您需要使用lookbehind,以确保字符串前面或前面没有单引号。但是,这在JS regexp中是不可能的。如果你确实有lookbehinds,你可以把它写成
/(?<=').*(?=')|\w+/