正则表达式根据模式替换所有匹配项

时间:2015-03-12 15:56:10

标签: javascript regex replace

var testString = 'Please use "command1" to accept and "command2" to ignore';

所有我试图实现的都是替换引号之间的字符串,但在替换时,我需要知道引号内的内容。

更换后应该像:

var result = 'Please use <a href="someurl?cmd=command1">command1</a> to accept and <a href="someurl?cmd=command2">command2</a> to ignore';

我尝试了这样的事情但没有成功:

            var rePattern = /\"(.*?)\"/gi;
            Text.replace(rePattern, function (match, txt, urlId) {
                return "rendered link for " + match;
            });

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式/"(.+?)"/g匹配所有引用文本,并使用不带引号的命令的捕获组。然后,您可以在替换字符串中使用"$1"

'Please use "command1" to accept and "command2" to ignore'
.replace(/"(.+?)"/g, '<a href="someurl?cmd=$1">$1</a>');

答案 1 :(得分:1)

您应该查看有关String.prototype.replace()的MDN文档,特别是有关Specifying a function as a parameter的部分。

var testString = 'Please use "command1" to accept and "command2" to ignore';
var reg = /"([^"]+)"/g;
var testResult = testString.replace(reg, function (match, p1) {
    return '<a href="someurl?cmd=' + p1 + '">' + p1 + '</a>';
});

replace的第一个参数是正则表达式,第二个参数是匿名函数。该函数发送了四个参数(请参阅MDN&#39; s文档),但我们只使用前两个:match是整个匹配的字符串 - "command1"或{{1 }和"command2"是正则表达式中第一个捕获组的内容,p1command1(不含引号)。此匿名函数返回的字符串将替换为。

答案 2 :(得分:0)

您可以使用捕获组,然后在替换中引用它。

查找

/\"([^\"]+)\"/gm

然后替换

<a href="someurl?cmd=$1">$1</a>

https://regex101.com/r/kG3iL4/1

var re = /\"([^\"]+)\"/gm; 
var str = 'Please use "command1" to accept and "command2" to ignore';
var subst = '<a href="someurl?cmd=$1">$1</a>'; 

var result = str.replace(re, subst);