匹配正则表达式,然后删除该正则表达式的子集

时间:2011-12-15 01:01:48

标签: javascript regex

我正在使用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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:1)

您只能抓住想要保留的位:

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