2011-12-15 20 views
2

我正在使用JavaScript來解析某些字符串。匹配一個正則表達式,然後刪除該正則表達式的子集

我有一些字符串看起來像這樣的:

 
1234 1/2 Old Town Alexandria 

我已經寫了一個正則表達式來確定,其中部分來自街上號碼後實例:

var addressFractionRegex = /^\d*\s+(1[/]\d)\s+/i; 

我想只有在整個正則表達式匹配的情況下(即:分數前面有一個街道號),才能從源字符串中刪除正則表達式的小數部分。在這種情況下,我會結束(刪除「1/2」):

 
1234 Old Town Alexandria 

我還想將我移除的部分保存到另一個變量中。所以理想情況下,我會得到類似的東西:

var street_address = '1234 Old Town Alexandria'; 
var fraction = '1/2'; 

這是怎麼做到的JavaScript?

謝謝!

回答

3

replace can take a function

var fraction; 
var street_address = "1234 1/2 Old Town Alexandria".replace(/^\d*\s+(1[/]\d)\s+/i, function (match, capture) { 
    fraction = capture.trim(); 
    return match.replace(capture,'') 
}); 

fraction; // 1/2 
street_address; // 1234 Old Town Alexndria 

Demo

+0

謝謝,那是真棒 – 2011-12-15 01:23:31

1

replace功能需要一個替換字符串。你可以將你想要保存的所有東西分組,並省略任何你想要取出的東西。這裏,我們使子模式1和3,並留下了存儲在2

var addressFractionRegex = /^(\d*\s+)(1[/]\d)(\s+)/i; 

var data = '123 1/5 abc'; 

alert(data.replace(addressFractionRegex, '$1$3')); 

fiddle

1

你的分數你可以只捕捉你想要保留位:

"1234 1/2 Old Town Alexandria".replace(/^(\d*\s+)1\/\d\s/, '$1');