猿问

在 Javascript 中通过匹配替换

我需要匹配数字后跟一个单位,并使用 Javascript 用数字+下划线+单位替换它们。


我想出了这个代码,它不会产生我想要达到的结果。


var x = myFunction("I have 3 billion dollars");


function myFunction(text) {

return  text.replace(/(\d+\.?(?:\d{1,2})?) (\bmillion\b|\bbillion\b|\bbillion\b|\bmillions\b|\bbillions\b|\btrillion\b|\btrillions\b|\bmeter\b|\bmeters\b|\bmile\b|\bmiles\b|\%)/gi, function (match) {

          return "<span class='highlighted'>" + match[1] + "_" + match[2] + "</span>";

    });

 }

上面的代码应该返回“我有 3_billion 美元”(但就替换而言,它返回 _b)。由于我是 Java 新手,任何建议将不胜感激。


编辑 已经有很多有用的提示了!这里还有一些输入示例:


the street is 4.5 miles long

the budget was 430.000 dollars


慕妹3146593
浏览 201回答 3
3回答

忽然笑

str.replace如果可行,我们可以使用您的原始表达式:const regex = /(\d+\.?(?:\d{1,2})?) (\bmillion\b|\bbillion\b|\bbillion\b|\bmillions\b|\bbillions\b|\btrillion\b|\btrillions\b|\bmeter\b|\bmeters\b|\bmile\b|\bmiles\b|\%)/gm;const str = `3 billion3 million`;const subst = `<span class='highlighted'>" $1_$2 "</span>`;// The substituted value will be contained in the result variableconst result = str.replace(regex, subst);console.log('Substitution result: ', result);此外,我们可以稍微简化一下表达式:(\d+\.?(?:\d{1,2})?) (\bmillions?\b|\bbillions?\b|\btrillions?\b|\bmeters?\b|\bmiles?\b|\%)const regex = /(\d+\.?(?:\d{1,2})?) (\bmillions?\b|\bbillions?\b|\btrillions?\b|\bmeters?\b|\bmiles?\b|\%)/gm;const str = `3 billion3 million3 %2 meters`;const subst = `<span class='highlighted'>" $1_$2 "</span>`;// The substituted value will be contained in the result variableconst result = str.replace(regex, subst);console.log(result);演示正则表达式如果不需要此表达式并且您希望对其进行修改,请访问regex101.com 上的此链接。正则表达式电路jex.im可视化正则表达式:

慕姐8265434

为您提供更简单更清晰的示例let regex = /\d+ (million|billion|millions|billions|trillion|trillions|meter|meters|mile|miles)/glet match = "I have 3 billion dollars".match(regex)let replace = match.map(x => x.split(" ").join("_"))console.log(replace)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答