Javascript 如何在多行上匹配此模式
给定下面的文本,我想返回一个包含所有文本行的数组,格式如下Javascript 如何在多行上匹配此模式,javascript,regex,match,Javascript,Regex,Match,给定下面的文本,我想返回一个包含所有文本行的数组,格式如下1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN-1.1,即使一行实际上是跨多行的,也应该包含一行 RegExp: str.match(/\d{1,2}.SSRDOCSYYHK1\/\/\/\/\/.+?\d\.\d/g) 全文: var str= "A-CA25592185 A-ERNONREF/CHGFEEPLUSFAREDIF/CXL BY FLT TIME NOVALUE TKG FA
1.SSRDOCSYYHK1/////25AUG52/M//YOUNG/LANDON/KWAN-1.1
,即使一行实际上是跨多行的,也应该包含一行
RegExp:
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实际上包含作为单个实例捕获的两行。如果我使用他的例子,当一条线像这样断开,后面跟着另一条匹配的线时,总是会发生这种情况
Javascript中的点与新行不匹配,不幸的是,JS正则表达式引擎中没有DOTALL开关 但是,作为一种解决方法,您可以使用
[\s\s]
进行点匹配,并跨新行匹配正则表达式。
以下正则表达式适用于您:
var arr = str.match(/\d{1,2}\.SSRDOCSYYHK1\/{3,5}[\s\S]+?\d\.\d/g);
现场演示:如果它可以在任何地方被破坏,而不仅仅是在
点
匹配中,那么\s
技巧将不起作用。
我不认为有一种方法可以忽略javascript正则表达式(或者任何其他引擎)中的换行符
最好的选择是在匹配之前删除所有换行符,如下所示:
str = str.replace(/(\r\n|\n|\r)/gm,"");
然后你将
.match
确定。下面的常规
为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]
它的作用是:
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]
它的作用是:
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]
它的作用是:
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…(条件语句)
好看。你在上使用了什么
.match()
?你在这里没有提供太多的信息。我不确定我是否明白。我给出了6个我在……上使用的文本示例。。。我想我可以把它编辑得更清晰啊,现在我明白你说的下一行是什么意思了。编辑:你期望它会返回什么?我应该说新的行吗?或者其他的描述会更清楚吗?(没有讽刺,严肃的问题)我想,他们的意思基本上是一样的。我只是错过了你真正想做的事情(我仍然没有100%清楚)。你能给出一个文本输入和输出的例子吗?这是可行的,但是在我的大文本中,如果第一行像上面那样断开,这将匹配两个连续的行作为一个实例。我把我的问题说得更清楚了。str.match(/\d{1,2}\.SSRDOCSYYHK1\/{3,5}[\s\s]+?\d\.\d/g)
仍然提供了图像中显示的所有匹配项。请参见上面的编辑,新图片可能比我解释的更清晰。奇怪的是,当我这样做时,我得到一个数组,其中只有一个插槽填充了以下字符串“11.SSRDOCSYYHK1////25MAY55/M//YOUNG/LANDON/KWAN-1。1 12.SSRDOCSYYHK1/////04MAR59/F//YOUNG/LILY/LIMKUO-2.1“我已更改了小提琴中使用的正则表达式(缺少全局标志并添加了空格ignorer)。看看这是否有效:嗯,我想可能你发布了错误的链接。这似乎是原来的fiddleGotcha,这绝对是正确的轨道。是否有可靠的方法消除“1.”和“1”之间的任何空格。我尝试了。替换(“.”,“,”。"
但考虑到可能会有更多或更少的空间,这不是很通用。请参见。regex中的每个paren都创建一个组,$n
以该顺序引用一个组。嗯,这似乎与您使用该网站或regex好友进行测试的任何示例都不匹配。这也可能匹配以“5.SSRDOCSWSHK1”开头的行:在javaScript和5.SSRDOCSWSHK1中,这不是我想要的所有工作。您可以[0-9]或[0-5]代替[0-1]。