用于匹配除第一次出现之外的字符的正则表达式

时间:2014-07-15 10:25:40

标签: javascript regex

如何匹配除第一次出现以外的文字中的字符?

例如:

98C546CC456C67应匹配98C546 CC 456 C 67

3 个答案:

答案 0 :(得分:1)

此问题是此问题中向"regex-match a pattern, excluding..."

解释的技术的典型案例

我们可以通过一个非常简单的正则表达式解决它:

^[^C]*C|(C)

交替|的左侧匹配字符串的开头直到第一个C。我们会忽略这场比赛。右侧匹配并捕获C到组1,我们知道它们是正确的,因为它们与左侧的表达式不匹配。

此程序显示了如何使用正则表达式(请参阅online demo底部的结果):

var subject = '98C546CC456C67';
var regex = /^[^C]*C|(C)/g;
var group1Caps = [];
var match = regex.exec(subject);

// put Group 1 captures in an array
while (match != null) {
    if( match[1] != null ) group1Caps.push(match[1]);
    match = regex.exec(subject);
}

document.write("<br>*** Matches ***<br>");
if (group1Caps.length > 0) {
   for (key in group1Caps) document.write(group1Caps[key],"<br>");
   }

参考

答案 1 :(得分:1)

不幸的是,JavaScript的正则表达式引擎受到严重限制。你不能在一个正则表达式中这样做。最好的解决方案可能就是

txt = subject.match(/[A-Z]/ig);  // or /[A-Z]+/ig, if CC should be a single match

并弃掉第一场比赛。

答案 2 :(得分:0)

例如,在像.NET Regex这样支持量词的量词中你可以使用lookbehind来寻找前面的字符

foreach(Match m in Regex.Matches("98C546CC456C67", @"(?<=C.*?)C")){
    Console.WriteLine(m.ToString() + " at position " + m.Index);
}