As per this answer,我正在使用replaceAll()
函数来交换我的javascript(Node)应用程序中的任意字符串:
this.replaceAll = function(str1, str2, ignoreCase)
{
return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignoreCase?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
}
我想扩展此正则表达式,以便不尝试匹配内部一组<span>...</span>
标记。 (我需要在某些字符串的部分周围添加HTML Span标记,并且我不想在span 两次中包装任何内容,如果模式会重复[Ie,'Foo'和'Foobar'在字符串“Foobarbaz”])
我在一个字符串上运行多个正则表达式搜索/替换,我想确保没有多次处理。
我的理解是,我需要以某种方式[<SPAN>] ... [</SPAN>]
,但我不确定具体细节。有什么建议吗?
答案 0 :(得分:1)
我不明白你的正则表达式是做什么的,但一般来说技术是这样的:
html = "replace this and this but not <span> this one </span> or <b>this</b> but this is fine"
// remove parts you don't want to be touched and place them in a buffer
tags = []
html = html.replace(/<(\w+).+?<\/\1>/g, function($0) {
tags.push($0)
return '@@' + (tags.length - 1)
})
// do the actual replacement
html = html.replace(/this/g, "that")
// put preserved parts back
html = html.replace(/@@(\d+)/g, function($0, $1) {
return tags[$1]
})