两个字符串之间的内容的正则表达式帮助(javascript)

时间:2017-03-24 19:41:41

标签: javascript regex string replace

希望有人可以提供帮助。我有一个字符串格式如下例所示:

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|块的函数是其中一部分循环或递归连续查找下一个块并替换它,直到在字符串中找不到更多的块。

......但这看起来很贵。有更有说服力的方式吗?

2 个答案:

答案 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"
}