JS - 正则表达式替换在一次调用中发生多次,如何让它运行一次
JS - Regex replacing happens multiple times in one call, how do I get it to run once?
我有一个字符串
Yes (+1500)
我想用(+ $1700)
(或- $1700
,或0
,或任何数字)替换(+ $1500)
所以我正在用这个正则表达式进行测试:/'('+(.+?)')|'('-(.+?)')/
var string = 'Yes (+ $1500)';
string.replace(/'('+(.+?)')|'('-(.+?)')/, '(+ $1700)');
// returns "Yes (+ $1500700)"
如果我尝试使用其他数字,它会返回类似的值
var string = 'Yes (+ $1500)';
string.replace(/'('+(.+?)')|'('-(.+?)')/, '(+ $1700)');
// returns "Yes (+ $1500700)"
// desired result: "Yes (+ $1700)"
var string = 'Yes (+ $1500)';
string.replace(/'('+(.+?)')|'('-(.+?)')/, '(- $1700)');
// returns "Yes (- $1500700)"
// desired result: "Yes (- $1700)"
var string = 'Yes (+ $1500)';
string.replace(/'('+(.+?)')|'('-(.+?)')/, '(- $12345)');
// returns "Yes (- $15002345)"
// desired result: "Yes (- $12345)"
我认为这是因为正则表达式命令/'('+(.+?)')|'('-(.+?)')/
从字符串Yes (+ $1500)
返回多个匹配项:
var string = 'yes (+ $1500)';
/'('+(.+?)')|'('-(.+?)')/.exec(string);
// returns:
// ["(+ $1500)", " $1500", undefined]
所以我认为有些奇怪,.replace 看到 2 个或更多与正则表达式命令匹配,并尝试替换它们。
.replace()
替换多个匹配项还是仅替换一个匹配项?
这是我的正
则表达式命令的正则表达式示例:https://regex101.com/r/qH0sR1/1
您需要
在替换字符串中加倍$
,您可以使用[-+]
字符类来匹配-
或+
:
var string = 'Yes (+ $1500)';
document.body.innerHTML = string.replace(/'(([+-])[^)]*')/, '($1 $$1700)');
在此处查看正则表达式演示。$
必须加倍,因为它应该转义表示反向引用的$
。
-
'(
- 匹配(
-
([+-])
- 匹配并捕获到第 1 组+
或-
-
[^)]*
- 匹配除)
以外的 0+ 个字符 -
')
- 字面)
模式可以进一步改进,例如/'(([+-])'s*'$'d+')/
或/'(([+-])'s*'$?'d+')/
。如果需要进行多次替换,请添加/g
修饰符。
相关文章:
- 使用每500ms运行一次的jquery函数是个好主意吗
- For循环在Jquery中只运行一次
- 谷歌图表在运行应用程序时只能显示一次
- 使函数只运行一次(Javascript)
- 更改路由后,运行一次js脚本
- 只运行一次提取的脚本
- 可能只在for循环内部运行一次代码块
- 在单击事件中,第一次单击时激发代码一次,其余代码在所有单击时运行
- 在Flask中使用.getJSON请求时,只运行一次命令
- 运行“;非“;单击另一个函数中的函数仅一次
- JavaScript只有在最后一次被调用时才运行函数
- 数据互绑定问题:转换器只运行一次,无法绑定元素的 ID
- 您可以在节点.js上一次运行多个应用程序吗?
- 如何一次运行一次循环javascript
- 从命令行一次运行大量摩卡测试的好方法是什么
- 如何让 JavaScript 一次运行一个字符串
- 无法在一次运行中删除多个数组元素
- 如何使jquery函数一次运行一个
- 在一次运行中分配并返回一个变量
- 一次运行2个动画