2012-08-24 107 views
0

我使用正則表達式從類似下面的字符串中提取特定的單詞:修剪正則表達式的結果

<div class = ''></div>class class  

我現在的正則表達式語句是這樣的:

/(<)[^(>)]*(;| |'|&quote;)(class)?( |'|&quote;|=)/gi 

在這種情況下我婉噸至匹配單詞'class',但前提是前後必須有特定的字符(或&符號)。這種說法一致:

<div class  

出原始字符串的,我在一個替代方法,使用這種(插入文本,其中「類」是),我想保持其它字符周圍,有沒有什麼修剪這個比賽的方式只能選擇(替換)'class'這個詞(在這個例子中)?

或者有沒有更好的方法來做到這一點? 在此先感謝。

+0

我不清楚你想要什麼。所以你想在'class'被一些特定字符包圍時匹配,然後刪除那些其他字符? – Abraham

+0

不,我想刪除'class'並保留其他字符,但只有'class'在它之前和之後有特定的字符。 – CKKiller

+0

'[^(>)] *'匹配任何不包含字符'(','&','g','t',';'或')'的字符串。 –

回答

1

您可以使用下面的代碼來做好這項工作:

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   

但是你必須保證什麼beforeafterremoved字符串做不含特價RegExp格式字符(例如.[]?*等,參見MDN RegExp)。否則,您必須首先在before逃避這些特殊字符,afterremoved字符串。

UPDATE:

您還可以使用有效正則表達式beforeafterremoved做出更靈活的搜索。例如下一個代碼中刪除字母'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" 
+0

+1,但是內容是動態的(我給出的僅僅是一個例子),這意味着'before'必須是'<',並且這個語句意味着任何次數的任意*除了* >'那麼'class'(在這種情況下)和'after'必須是' ','=','"e;'或''' – CKKiller

+0

@CKKiller,請參閱答案中的更新。可能是它可以幫助你。 –

0

試試這個:

var match = /your regex here/.exec(myString) 
match = match.replace('class','')