【发布时间】:2019-06-08 18:01:25
【问题描述】:
我需要匹配数字后跟一个单位,并使用 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>";
});
}
上面的代码应该返回“我有 30 亿美元”(但就替换而言,它返回 _b)。由于我是 Java 新手,任何建议都将不胜感激。
编辑 已经有很多有用的提示了!这里还有一些输入示例:
the street is 4.5 miles long
the budget was 430.000 dollars
【问题讨论】:
-
输入字符串有多少变化?你能提供更多样本还是总是类似于 string number space 单位 字符串?
-
matchinfunction (match)是整个匹配的字符串。您可以使用function (match, group1, group2)并使用group1和group2而不是match[1]和match[2],但您确实不需要匿名方法,使用text.replace(your_regex, "<span class='highlighted'>$1_$2</span>") -
嗨兰迪,输入基本上是运行文本,可能包含数字(任何格式)和一组测量单位。在这种情况下,我对 Javascrit 的错误更感兴趣,而对正则表达式(我可能需要调整)的兴趣不大。正如答案中所指出的,错误在于“匹配”不是数组而是字符串。
标签: javascript regex replace regex-lookarounds regex-group