2013-08-04 36 views
1

我有下面的文字組,要提取的粗體文字:化妝正則表達式匹配到下一個實例不是最後

24.SSRTKNEWSHK1HNLYVR1865U30AUG- 4.1 .8387254346122C2 25.SSRTKNEWSHK1YVRHNL1864J22AUG- 5.1 .8387254346123C1 1.1楊/ LAWRENCE.KWANLEUNG * JWA2.1YEUNG/LILY.LIMKUO * JWA 3.1YEUNG/ANDREA.LAUREN * JWA4.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 
} 
+1

嘗試'。+?'而不是'。+'。 – georg

回答

1

你的模式是貪婪的,在.+爭奪一切這是可以和模式仍然匹配。

這種模式的工作原理:

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

我已經做了.+懶加入了.+?,這意味着它的最低數,它可以和格局依然匹配的字符相匹配。

請注意,[\d]{1}\d{1}相同,與\d相同。我還強制第二位數字後面的字符爲[A-Za-z],否則第一個4.1的所有內容都會匹配。

+0

啊,我明白了。而且這更容易閱讀謝謝 – DelightedD0D

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); 

但我不知道究竟你的標準是,如果你想要的東西,這並不這樣做,你需要解釋它更好。

相關問題