如何在找到正则表达式匹配后添加字符

时间:2018-03-15 10:00:32

标签: javascript regex

我想在字符串

中的数学表达式中添加一个右括号
var str = "solve this now Math.sqrt(345+6 is good but Math.sin(79 is better."; 
var patt1 =  /\((d+)/g;
var result = str.match(patt1);
document.getElementById("demo").innerHTML = result;

显示匹配模式(345和(79)。在不更改内容的情况下,如何添加结束括号以使字符串看起来像;

var str = " solve this now Math.sqrt(345)+6 is good but Math.sin(79) is better.

2 个答案:

答案 0 :(得分:1)

使用否定先行断言。

var str = "solve this now Math.sqrt(345+6 is good but Math.sin(79 is better."; 
console.log(str.replace(/(\(\d+)\b(?!\))/g, "$1)"))

(\(\d+)捕获\(和一个或多个数字

(?!\))仅当匹配后没有关闭大括号)

答案 1 :(得分:0)

检查开口括号后面是否有数字,而不是数字后的右括号

var str = "solve this now Math.sqrt(345+6 is good but Math.sin(79 is better.";
var output = str.replace( /\([\d]+(?!=\))/g, r => r + ")");

<强>输出

  

现在解决这个问题Math.sqrt(345)+6很好,但Math.sin(79)更好。

<强>演示

&#13;
&#13;
var str = "solve this now Math.sqrt(345+6 is good but Math.sin(79 is better.";
var output = str.replace(/\([\d]+(?!=\))/g, r => r + ")");
console.log(output);
&#13;
&#13;
&#13;

您可以包含.以允许小数

var str = "solve this now Math.sqrt(345.5+6 is good but Math.sin(79.33 is better (232.";
var output = str.replace( /\(\d+(\.(\d)+)?(?!=\))/g, r => r + ")");

<强>输出

  

现在解决这个问题Math.sqrt(345.5)+6很好,但Math.sin(79.33)更好(232)。

<强>演示

&#13;
&#13;
var str = "solve this now Math.sqrt(345.5+6 is good but Math.sin(79.33 is better (232.";
var output = str.replace( /\(\d+(\.(\d)+)?(?!=\))/g, r => r + ")");
console.log(output);
&#13;
&#13;
&#13;