如何在多行上匹配此模式

时间:2013-08-13 12:44:58

标签: javascript regex match

鉴于以下文字,我想返回一个包含以下格式1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 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行的两个实例不匹配,因为以下任何一种方式都可能发生换行,并且目前不会匹配:

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)没有运气

这是我得到的数组:

enter image description here


anubhava的回答如下返回以下数组,请注意插槽0和2实际上包含两条被捕获为单个实例的行。如果一行像这样断开,并且如果我使用他的例子后面跟着另一条匹配线,则总会发生这种情况。

enter image description here

3 个答案:

答案 0 :(得分:1)

如果它可以在任何地方被破坏,不仅在DOT匹配中,\s技巧将无效。 我认为有一种方法可以忽略javascript正则表达式(或任何其他引擎,实际上)的换行符。

您最好的选择是在匹配前删除所有换行符,如下所示:

str = str.replace(/(\r\n|\n|\r)/gm,"");

然后你.match

答案 1 :(得分:1)

确定。低于regular工作1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 1.1

[0-1]\.[A-Z]+[0-1]\/\/\/\/\/[0-9]+[A-Z]+[0-9]+\/[A-Z]\/\/[A-Z]+\/[A-Z]+\/[A-Z]+\-\s[0-1]\.[0-1]

它适用于:

1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 1.
1

[0-1]\.[A-Z]+[0-1]\/\/\/\/\/[0-9]+[A-Z]+[0-9]+\/[A-Z]\/\/[A-Z]+\/[A-Z]+\/[A-Z]+\-\s[0-1]\.\n[0-1]

它适用于:

1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 1
.1

[0-1]\.[A-Z]+[0-1]\/\/\/\/\/[0-9]+[A-Z]+[0-9]+\/[A-Z]\/\/[A-Z]+\/[A-Z]+\/[A-Z]+\-\s[0-1]\n\.[0-1]

它适用于:

1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN- 
1.1

[0-1]\.[A-Z]+[0-1]\/\/\/\/\/[0-9]+[A-Z]+[0-9]+\/[A-Z]\/\/[A-Z]+\/[A-Z]+\/[A-Z]+\-\n[0-1]\.[0-1]

它适用于:

1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN
- 1.1
[0-1]\.[A-Z]+[0-1]\/\/\/\/\/[0-9]+[A-Z]+[0-9]+\/[A-Z]\/\/[A-Z]+\/[A-Z]+\/[A-Z]+\n\-\s[0-1]\.[0-1]

现在你应该定义嵌套的if和else .....(条件语句)

好看。

答案 2 :(得分:0)

Javascript中的DOT与新行不匹配,遗憾的是JS regex引擎中没有DOTALL开关。

但是,作为一种解决方法,您可以将[\s\S]用于DOT,并在新行中匹配正则表达式。

以下正则表达式适合您:

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

现场演示:http://ideone.com/QIYCMA