我有一个字符串
Yes (+1500)
我希望将(+ $1500)
替换为(+ $1700)
(或- $1700
,或0
,或任何数字
所以我正在使用此正则表达式进行测试:/\(\+(.+?)\)|\(\-(.+?)\)/
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个或更多匹配到regex命令,并试图替换它们。
.replace()
会替换多个匹配项吗?
这是我的正则表达式命令的正则表达式示例:https://regex101.com/r/qH0sR1/1
答案 0 :(得分:0)
您需要在替换字符串中加倍$
,您只需使用[-+]
字符类来匹配-
或+
:
var string = 'Yes (+ $1500)';
document.body.innerHTML = string.replace(/\(([+-])[^)]*\)/, '($1 $$1700)');
请参阅regex demo here。 $
必须加倍,因为它应该转义表示反向引用的$
。
\(
- 匹配(
([+-])
- 匹配并捕获到第1组+
或-
[^)]*
- 匹配)
\)
- 文字)
可以进一步改进模式,例如/\(([+-])\s*\$\d+\)/
或/\(([+-])\s*\$?\d+\)/
。如果您需要进行多次替换,请添加/g
修饰符。