我有一个以下格式的文本块:
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
可能是任何字符,并且不限于一个字符
答案 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