用正则表达式替换文本中的多个字符串

时间:2015-01-14 00:08:15

标签: javascript regex

我的文字上撒有[cid:ce743cbf-8c44-4c84-aa72-6d2c9eb4b81a]标签(内嵌附件)

我需要浏览文本并将其替换为文件的链接。 所以我需要将实际标签与括号相匹配,并记住要将替换函数作为参数给出的UUID。

所以给出了字符串

var str = "some text 1 [cid:12345] more text follows 2 [cid:6789] last text"

我正在尝试用此测试替换它,但它甚至不能正确匹配。

str.replace(/\[cid:(.+)\]/gm, function(m,p){return p})

我对reg ex了解不多,请帮忙。我认为这与贪婪有关,因为它消耗了第一场比赛和最后一场比赛之间的所有内容。

感谢。

2 个答案:

答案 0 :(得分:2)

+greedy运算符,意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。使用+?表示非贪婪的匹配意义"一个或多个 - 最好尽可能少"。

/\[cid:(.+?)]/g

注意:您可以删除m(多行)修饰符,在此处使用无意义。

答案 1 :(得分:2)

是的,你是正确的,这与贪婪有关。 .+部分将匹配字符串末尾的所有内容,然后它将开始回溯以匹配括号,找到字符串中的最后一个括号。

?之后添加.+将使其变得非贪婪:

var str = "some text 1 [cid:12345] more text follows 2 [cid:6789] last text"

str = str.replace(/\[cid:(.+?)\]/gm, function(m,p){return p});

// show in Stackoverflow snippet
document.write(str);

另一种方法是匹配除结束括号外的所有内容:

str = str.replace(/\[cid:([^\]]+)\]/gm, function(m,p){return p});