2011-12-15 52 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');