1

我有以下格式的文本块:

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 和正则表达式,我需要匹配此部分:

PHL 美国 CUN264.00AA MIA102.00AA PHL88.37NUC454.37END ROE1.00 美国 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可能是任何字符,并且不限于一个字符

4

3 回答 3

3

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

.match(/FARE CALC INDICATOR:.*([\s\S]+)\*\*FARE BREAKDOWN\/FOP\/TOUR CODE\*\*/)
于 2013-10-17T12:09:50.890 回答
1

你可以试试这个:

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

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

于 2013-10-17T12:06:10.487 回答
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
于 2013-10-17T14:29:09.907 回答