簡體   English   中英

正則表達式匹配兩個常量之間的字符串部分,中心有新行

[英]regex to match section of string between two constants with new line in the center

我有一個以下格式的文本塊:

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 CALC INDICATOR:並返回該點和**FARE BREAKDOWN/FOP/TOUR CODE**之間的所有文本**FARE BREAKDOWN/FOP/TOUR CODE**

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

這幾乎可以工作,但是,如果FARE CALC INDICATOR:和下一個新行(如本例中的數字9 )之間有任何文本,那么文本也會被捕獲,也不應該被捕獲。

此示例中的數字9可能是任何字符,並且不限於一個字符

作為點. 與換行符不匹配,你可以這樣做:

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

你可以試試這個:

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

捕獲組在FARE CALC INDICATOR:之后的下一個換行符處開始FARE CALC INDICATOR:並在內容之后的最后一個換行符之前停止。

你真的不需要任何花哨的正則表達式。 考慮以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM