希望有人可以提供帮助。我有一个字符串格式如下例所示:
Lipsum text as part of a paragraph here, yada. |EMBED|{"content":"foo"}|/EMBED|. Yada and the text continues...
我正在寻找的是一个Javascript RegEx来捕获|EMBED||/EMBED|
'标记之间的内容,在该内容上运行一个函数,然后替换整个|EMBED|...|/EMBED|
返回该函数的字符串。
问题是我可能在一个更大的字符串中有多个|EMBED|
块。例如:
Yabba...|EMBED|{"content":"foo"}|/EMBED|. Dabba-do...|EMBED|{"content":"yo"}|/EMBED|.
我需要RegEx分别捕获和处理每个|EMBED|
块,因为其中包含的内容将是相似的,但是唯一的。
我最初的想法是我可以拥有一个捕获|EMBED|
块的第一次迭代的RegEx,并且替换此|EMBED|
块的函数是其中一部分循环或递归连续查找下一个块并替换它,直到在字符串中找不到更多的块。
......但这看起来很贵。有更有说服力的方式吗?
答案 0 :(得分:2)
您可以使用String.prototype.replace
将通过正则表达式找到的子字符串替换为匹配using a mapping function的修改版本,例如:
var input = 'Yabba...|EMBED|{"content":"foo"}|/EMBED|. Dabba-do...|EMBED|{"content":"yo"}|/EMBED|.'
var output = input.replace(/\|EMBED\|(.*?)\|\/EMBED\|/g, function(match, p1) {
return p1.toUpperCase()
})
console.log(output) // "Yabba...{"CONTENT":"FOO"}. Dabba-do...{"CONTENT":"YO"}."

确保使用非贪婪选择器.*?
选择分隔符之间的内容,以允许每个字符串进行多次替换。
答案 1 :(得分:1)
这是遍历正则表达式匹配的鳕鱼:
var str = 'Lipsum text as part of a paragraph here, yada. |EMBED|{"content":"foo"}|/EMBED|. Yada and the text continues...';
var rx = /\|EMBED\|(.*)\|\/EMBED\|/gi;
var match;
while (true)
{
match = rx.exec(str);
if (!match)
break;
console.log(match[1]); //match[1] is the content between "the tags"
}