1

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

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

我想使用 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
}
4

2 回答 2

2

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

这种模式有效:

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

.+通过添加 a 使懒惰.+?,这意味着它匹配它可以匹配的最小字符数并且模式仍然匹配。

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

于 2013-08-04T12:14:57.440 回答
0
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);

但我不知道你的标准到底是什么,所以如果这不符合你的要求,你需要更好地解释它。

于 2013-08-04T12:17:07.530 回答