用正则表达式替换文本中的多个字符串
Replace multiple strings in text with reg ex
我有一些文字带有 [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})
我不太了解正则表达式,请帮忙。我认为这与贪婪有关,因为它消耗了第一场比赛和最后一场比赛之间的一切。
谢谢。
+
是一个 greedy 运算符,这意味着它将尽可能多地匹配,并且仍然允许匹配正则表达式的其余部分。使用 +?
表示非贪婪匹配,意思是 "one or more — preferably as few as possible"。
/\[cid:(.+?)]/g
注意:可以去掉m
(多行)修饰符,这里用无意义。
是的,你是对的,这与贪婪有关。 .+
部分会将所有内容匹配到字符串的末尾,然后开始回溯以匹配括号,找到字符串中的最后一个括号。
在 .+
之后添加 ?
将使其成为非贪婪的:
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 Whosebug snippet
document.write(str);
另一种方法是匹配除右括号外的所有内容:
str = str.replace(/\[cid:([^\]]+)\]/gm, function(m,p){return p});
我有一些文字带有 [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})
我不太了解正则表达式,请帮忙。我认为这与贪婪有关,因为它消耗了第一场比赛和最后一场比赛之间的一切。
谢谢。
+
是一个 greedy 运算符,这意味着它将尽可能多地匹配,并且仍然允许匹配正则表达式的其余部分。使用 +?
表示非贪婪匹配,意思是 "one or more — preferably as few as possible"。
/\[cid:(.+?)]/g
注意:可以去掉m
(多行)修饰符,这里用无意义。
是的,你是对的,这与贪婪有关。 .+
部分会将所有内容匹配到字符串的末尾,然后开始回溯以匹配括号,找到字符串中的最后一个括号。
在 .+
之后添加 ?
将使其成为非贪婪的:
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 Whosebug snippet
document.write(str);
另一种方法是匹配除右括号外的所有内容:
str = str.replace(/\[cid:([^\]]+)\]/gm, function(m,p){return p});