您可以使用下面的代码来做好这项工作:
var removeSubstring=(function(){
var fn=function($0,$1,$2,$3){return $1+$3;};
return function(str,before,after,removed){
var rg=new RegExp("("+before+")("+removed+")("+after+")","gi");
return str.replace(rg,fn);
};
})();
var str="<div class = ''></div>class class <div class ";
var before="<div ";
var after=" ";
var removed="class";
removeSubstring(str,before,after,removed);
// <div = ''></div>class class <div
但是你必须保证什么before
,after
和removed
字符串做不含特价RegExp格式字符(例如.
[
]
?
*
等,参见MDN RegExp)。否则,您必须首先在before
逃避这些特殊字符,after
和removed
字符串。
UPDATE:
您还可以使用有效正则表达式为before
,after
和removed
做出更灵活的搜索。例如下一个代码中删除字母'X','V'和'Z'但不删除'x' 的,'V'和'Z':
var str="qXd ezrwsvrVa etxceZd";
var before="q|w|e|r";
var after="a|s|d|f";
var removed="z|x|c|v";
removeSubstring(str,before,after,removed);
// "qd ezrwsvra etxced"
如果需要用一个字符串替换子,你可以使用下面的函数:
function replaceSubstring(str,before,after,removed,inserted){
var rg=new RegExp("("+before+")("+removed+")("+after+")","gi");
return str.replace(rg,function($0,$1,$2,$3){
// $1 is searched "before" substring
// $2 is searched "removed" substring
// $3 is searched "after" substring
return $1+(inserted||"")+$3;
});
};
var str="qXd ezrwsvrVa etxceZd";
var before="q|w|e|r";
var after="a|s|d|f";
var removed="z|x|c|v";
replaceSubstring(str,before,after,removed,"DDDD")
// "qDDDDd ezrwsvrDDDDa etxceDDDDd"
我不清楚你想要什么。所以你想在'class'被一些特定字符包围时匹配,然后删除那些其他字符? – Abraham
不,我想删除'class'并保留其他字符,但只有'class'在它之前和之后有特定的字符。 – CKKiller
'[^(>)] *'匹配任何不包含字符'(','&','g','t',';'或')'的字符串。 –