-1

以下のテキストが与えられた場合、次の形式のすべてのテキスト行の配列を返したいと思います。1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 1.1これは、実際には複数の行にまたがっている場合でも、1 行に収まる必要があります。

正規表現: str.match(/\d{1,2}.SSRDOCSYYHK1\/\/\/\/\/.+?\d\.\d/g)

全文:

var str= "A-CA25592185
A-ERNONREF/CHGFEEPLUSFAREDIF/CXL BY FLT TIME NOVALUE
TKG FAX-NOT PRICED  FARE TYPE EX 
FOP- 1.CA 
G- 1.SSRDOCSWSHK1/////25MAY55/M//YOUNG/LANDON/KWAN -  1.    
1 
)>MD
    2.SSRPSPTYYHK1///25AUG52/M-  1.1 
    3.SSRDOCSWSHK1/////25AUG52/F//YOUNG/LILY/LIMKUO -  2.1 
    4.SSRPSPTYYHK1///25AUG52/F-  2.1 
    5.SSRDOCSWSHK1/////25AUG52/F//YOUNG/ANDREA/LAUREN -  3.1 
    6.SSRPSPTYYHK1///25AUG52/F-  3.1 
    7.SSRDOCSWSHK1/////17MAR93/M//YOUNG/ETHAN/WESLEY -  4.1 
    8.SSRPSPTYYHK1///25AUG52/M-  4.1 
    9.SSRDOCSWSHK1/////23NOV96/M//YOUNG/WINSTON/JEREMY -  5.1 
   10.SSRPSPTYYHK1///25AUG52/M-  5.1 
   11.SSRDOCSYYHK1/////25MAY55/M//YOUNG/LANDON/KWAN -  1.   
1 
   12.SSRDOCSYYHK1/////04MAR59/F//YOUNG/LILY/LIMKUO -  2.1 
   13.SSRDOCSYYHK1/////25AUG52/F//YOUNG/ANDREA/LAUREN -  3.1 
)>MD
    7.SSRDOCSWSHK1/////25AUG52/M//YOUNG/ETHAN/WESLEY -  4.1 
    8.SSRPSPTYYHK1///25AUG52/M-  4.1 
    9.SSRDOCSWSHK1/////25AUG52/M//YOUNG/WINSTON/JEREMY -  5.1 
   10.SSRPSPTYYHK1///25AUG52/M-  5.1 
   11.SSRDOCSYYHK1/////25MAY55/M//YOUNG/LANDON/KWAN -  1.   
1 
   12.SSRDOCSYYHK1/////25AUG52/F//YOUNG/LILY/LIMKUO -  2.1 
   13.SSRDOCSYYHK1/////25AUG52/F//YOUNG/ANDREA/LAUREN -  3.1 
   14.SSRDOCSYYHK1/////25AUG52/M//YOUNG/ETHAN/WESLEY -  4.1 
   15.SSRDOCSYYHK1/////25AUG52/M//YOUNG/WINSTON/JEREMY -  5.1 
**** ITEMS SUPPRESSED ****/DR"

すべての一致を含む配列を期待していますが、以下のいずれかの方法で発生する可能性があり、現在は一致しない改行のため、11 行目の 2 つのインスタンスは一致しません。

var str="1.SSRDOCSYYHK1/////25AUG52/M//
YOUNG/LANDON/KWAN- 1.1"

var str="1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 1.
1"

var str="1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 1
.1"

var str="1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 
1.1"

var str="1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN
- 1.1"

上記のすべてのケースでこの RegExp が引き続き一致するようにどのように変更しますか?

str.match(/\d{1,2}.SSRDOCSYYHK1\/\/\/\/\/.+?\d\.\d/m)運が悪かったので試してみました

私が取得する配列は次のとおりです。

ここに画像の説明を入力


以下の anubhava の回答は、次の配列を返します。スロット 0 と 2 は、実際には 1 つのインスタンスとしてキャプチャされた 2 つの行を保持していることに注意してください。これは、彼の例を使用すると、行がこのように改行され、その後に別の一致する行が続く場合に常に発生します。

ここに画像の説明を入力

4

3 に答える 3

0

Javascript の DOT は新しい行と一致しません。残念ながら、JS 正規表現エンジンには DOTALL スイッチがありません。

[\s\S]ただし、回避策として、 DOT に使用して、新しい行でも正規表現を一致させることができます。

次の正規表現はあなたのために働くはずです:

var arr = str.match(/\d{1,2}\.SSRDOCSYYHK1\/{3,5}[\s\S]+?\d\.\d/g);

ライブデモ: http://ideone.com/QIYCMA

于 2013-08-13T12:57:23.930 に答える