2012-08-24 104 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','')