-1

给定下面的文本,我想返回具有以下格式的所有文本行的数组,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)过但没有运气

这是我得到的数组:

在此处输入图像描述


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

在此处输入图像描述

4

3 回答 3

1

如果它可以在任何地方被破坏,不仅在DOT匹配中,那么这个\s技巧就行不通了。我认为没有办法忽略 javascript 正则表达式(或任何其他引擎,实际上)中的换行符。

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

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

然后你.match

于 2013-08-13T13:29:30.573 回答
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 .....(条件语句)

好看。

于 2013-08-13T14:02:55.900 回答
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 回答