您可以使用下面的代碼來做好這項工作:
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',';'或')'的字符串。 –