我的文字上撒有[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了解不多,请帮忙。我认为这与贪婪有关,因为它消耗了第一场比赛和最后一场比赛之间的所有内容。
感谢。
答案 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});