正则表达式匹配两个常量之间的字符串部分,中心有新行

时间:2013-10-17 11:57:00

标签: javascript regex match

我有一个以下格式的文本块:

FARE CALC INDICATOR: 9 
PHL US CUN264.00AA MIA102.00AA PHL88.37NUC454.37END ROE1.00 US 
XT34.40US5.00XA5.00AY 23.20UK28.14XD9.00XFPHL4.5 MIA4.5

               **FARE BREAKDOWN/FOP/TOUR CODE**

使用Javascript和regex,我需要匹配此部分:

PHL US CUN264.00AA MIA102.00AA PHL88.37NUC454.37END ROE1.00 US     XT34.40US5.00XA5.00AY 23.20UK28.14XD9.00XFPHL4.5 MIA4.5

基本上我需要在FARE CALC INDICATOR:之后找到下一个换行符并返回该点和**FARE BREAKDOWN/FOP/TOUR CODE**之间的所有文字

我尝试了.match(/FARE CALC INDICATOR:([\s\S]+)\*\*FARE BREAKDOWN\/FOP\/TOUR CODE\*\*/)

这几乎可行但是,如果FARE CALC INDICATOR:和下一个新行(如本例中的数字9)之间有任何文字,则该文本也会被捕获,不应该被捕获。

此示例中的数字9可能是任何字符,并且不限于一个字符

3 个答案:

答案 0 :(得分:3)

由于点.与换行符不匹配,您可以这样做:

.match(/FARE CALC INDICATOR:.*([\s\S]+)\*\*FARE BREAKDOWN\/FOP\/TOUR CODE\*\*/)

答案 1 :(得分:1)

你可以试试这个:

/FARE CALC INDICATOR:[^\r\n]*\r?\n\s*([\s\S]+?)\s+\*\*FARE BREAKDOWN\/FOP\/TOUR CODE\*\*/

捕获组从FARE CALC INDICATOR:之后的下一个换行开始,并在内容之后的最后一个换行符之前停止。

答案 2 :(得分:0)

你真的不需要任何花哨的正则表达式。请考虑以下代码:

str = "FARE CALC INDICATOR: 9 \n" + 
"PHL US CUN264.00AA MIA102.00AA PHL88.37NUC454.37END ROE1.00 US \n" + 
"XT34.40US5.00XA5.00AY 23.20UK28.14XD9.00XFPHL4.5 MIA4.5\n" + 
"\n" + 
"               **FARE BREAKDOWN/FOP/TOUR CODE**\n";

var p1 = 'FARE CALC INDICATOR: 9'; // start pattern
var p2 = '**FARE BREAKDOWN/FOP/TOUR CODE**'; // end pattern

var i1 = str.indexOf( p1 );
var i2 = str.indexOf( p2 );
// TODO: check if i1 and i2 are > 0 here

var substr = str.substring(i1 + p1.length + 1, i2 - 1);

console.log( substr );
// PHL US CUN264.00AA MIA102.00AA PHL88.37NUC454.37END ROE1.00 US 
// XT34.40US5.00XA5.00AY 23.20UK28.14XD9.00XFPHL4.5 MIA4.5