2013-10-17 14 views
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可能是任何字符,而不是僅限於一個字符

+1

因爲似乎沒有'dotall'標誌在JavaScript中看到http://stackoverflow.com/q/1068280/2870069 – Jakob

回答

3

由於點.不匹配換行符,你可以這樣做:

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

你可以試試這個:

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

+0

給出的解決方法就像一個魅力,與M42去爲可讀性 – DelightedD0D

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 
+0

有了這個例子是的但是,「在這個例子中的數字9可能是任何字符,並不限於一個字符」是因爲我去正則表達式 – DelightedD0D

+0

其實你可以用任何其他字符串取代p1和p2它會正常工作。 – anubhava

+0

的確如此,但是我要分析1000塊這樣的塊,並且在「:」之後出現的字符會以許多不可預知的模式生成。那麼,至少不容易預測。但是,謝謝你,但我確實看到這個解決方案的優點,否則。 – DelightedD0D