Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在多行上匹配此模式_Javascript_Regex_Match - Fatal编程技术网

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]。