【问题标题】:make regex match to the next instance not the last使正则表达式匹配到下一个实例而不是最后一个
【发布时间】:2013-08-04 12:02:57
【问题描述】:

我有以下一组文本,想提取粗体文本:

24.SSRTKNEWSHK1HNLYVR1865U30AUG- 4.1 .8387254346122C2 25.SSRTKNEWSHK1YVRHNL1864J22AUG- 5.1 .8387254346123C1 1.1YEUNG/LAWRENCE.KWANLEUNG*JWA 2.1YEUNG/LILY.LILY.LIMKUO*JWA 3.1YEUNG/ANDREA.LAUREN*JWA 4.1YEUNG/ETHAN.WESLEY*JWA 5.1YEUNG/WINSTON.JEREMY*JWA 1 WS1864J 22AUG TH YVRHNL HK5 600P 904P/O $ E 2 WS1865U 30AUG FR HNLYVR HK5 1010P 656A#1/O $ E

我想用 Javascript 最终得到一个这样的数组:

[0] ->  1.1YEUNG/LAWRENCE.KWANLEUNG*JWA  
[1] ->  2.1YEUNG/LILY.LIMKUO*JWA
[2] ->  3.1YEUNG/ANDREA.LAUREN*JWA  
[3] ->  4.1YEUNG/ETHAN.WESLEY*JWA
[4] ->  5.1YEUNG/WINSTON.JEREMY*JWA

到目前为止我想出的是:/[\d]{1}\.[\d]{1}.+\*[A-Z]{3}/

这与文本匹配,但在同一行找到的任何匹配项都被视为一个匹配项,因此我最终得到:

[0] ->  1.1YEUNG/LAWRENCE.KWANLEUNG*JWA 2.1YEUNG/LILY.LIMKUO*JWA
[1] ->  3.1YEUNG/ANDREA.LAUREN*JWA 4.1YEUNG/ETHAN.WESLEY*JWA    
[2] ->  5.1YEUNG/WINSTON.JEREMY*JWA

如何告诉这个正则表达式只匹配\*[A-Z]{3} 的下一个实例而不是最后一个实例?

我正在 RegexBuddy 中处理此问题,因此没有真正的 javascript 可显示,但这是它在“使用”页面上生成的 if 语句:

if (subject.match(/[\d]{1}\.[\d]{1}.+\*[A-Z]{3}/)) {
    // Successful match
} else {
    // Match attempt failed
}

【问题讨论】:

  • 试试.+?而不是.+

标签: javascript regex match


【解决方案1】:

你的模式是贪婪的,.+ 抓住了一切可以并且模式仍然匹配。

这种模式有效:

\d\.\d[A-Za-z].+?\*[A-Z]{3}

我通过添加.+? 使.+ 变得懒惰,这意味着它可以匹配最少 个字符并且模式仍然匹配。

注意[\d]{1}\d{1} 相同,\d 相同。我还强制第二个数字后面的字符为[A-Za-z],否则第一个4.1 中的所有内容都将匹配。

【讨论】:

    【解决方案2】:
    var text = [
        "24.SSRTKNEWSHK1HNLYVR1865U30AUG- 4.1 .8387254346122C2",
        "25.SSRTKNEWSHK1YVRHNL1864J22AUG- 5.1 .8387254346123C1",
        "1.1YEUNG/LAWRENCE.KWANLEUNG*JWA 2.1YEUNG/LILY.LIMKUO*JWA",
        "3.1YEUNG/ANDREA.LAUREN*JWA 4.1YEUNG/ETHAN.WESLEY*JWA",
        "5.1YEUNG/WINSTON.JEREMY*JWA 1 WS1864J 22AUG TH YVRHNL HK5 600P",
        "904P/O $ E 2 WS1865U 30AUG FR HNLYVR HK5 1010P 656A#1/O $ E"].join("\n");
    text.match(/\d\.\d[a-z\/.*]+/igm);
    

    但我不知道你的标准是什么,所以如果这不能达到你想要的效果,你需要更好地解释它。

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      相关资源
      最近更新 更多