我有以下文字组,想要提取粗体文字:
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
}
答案 0 :(得分:1)
你的模式是贪婪的,.+
抓住一切即可,模式仍然匹配。
此模式有效:
\d\.\d[A-Za-z].+?\*[A-Z]{3}
我通过添加.+
使.+?
懒惰,这意味着它匹配最小字符数,并且模式仍然匹配。
请注意,[\d]{1}
与\d{1}
相同,与\d
相同。我还强制将第二个数字后的字符设为[A-Za-z]
,否则第一个4.1
的所有内容都将匹配。
答案 1 :(得分: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);
但我不知道你的标准究竟是什么,所以如果这不符合你的要求,你需要更好地解释它。