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}/

これはテキストと一致しますが、同じ行で見つかった一致は 1 つの一致として扱われるため、次のようになります。

[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}

.+追加して遅延を作成しました.+?。これは、可能な最小文字数に一致し、パターンがまだ一致していることを意味します。

[\d]{1}は と同じで\d{1}あることに注意してください\d。また、2 桁目の後の文字を強制的に a にしました。[A-Za-z]そうしないと、最初の桁からすべて4.1が一致します。

于 2013-08-04T12:14:57.440 に答える