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

Match a regular expression, then remove a subset of that regular expression

本文关键字:正则表达式 删除 子集 然后      更新时间:2023-09-26

我正在使用javascript来解析一些字符串。

我有一些像这样的字符串:

<>之前1234/2亚历山大老城之前

我写了一个正则表达式来识别街道号后面有分数的实例:

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

我想做的是从源字符串中删除正则表达式的分数部分,只有在整个正则表达式匹配的情况下(即:分数前面有街道号码)。在这种情况下,我将以(删除"1/2")结束:

<>之前亚历山大老城1234号之前

我还想保存我删除到另一个变量的部分。所以,理想情况下,我最终会像这样:

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

如何在javascript中完成?

谢谢!

replace可以取一个函数:

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
演示

replace函数接受一个替换字符串。你可以把你想要保留的东西分组,也可以省略你想要删除的东西。这里我们保留子模式1和3,并省略存储在2中的分数。

var addressFractionRegex = /^('d*'s+)(1[/]'d)('s+)/i;
var data = '123 1/5 abc';
alert(data.replace(addressFractionRegex, '$1$3'));

小提琴

您可以只捕获您想要保留的位:

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