0

我正在使用 RegExp 从字符串中提取特定单词,如下所示:

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

我目前的 RegExp 语句是这样的:

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

在这种情况下,我不想匹配“类”这个词,但前提是它之前和之后都有特定的字符(或与号)。此语句匹配:

<div class 

在原始字符串之外,我在替换方法中使用它(在“类”所在的位置插入文本)并且我想保留它周围的其他字符,有没有办法将此匹配修剪为仅选择(替换)单词“类”(在这种情况下)?

或者有没有更好的方法来做到这一点?提前致谢。

4

2 回答 2

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  

但是您必须确保 inbefore和字符串中afterremoved内容不包含特殊的RegExp格式字符(例如. [ ] ? *和其他,请参阅MDN RegExp)。否则必须先转义before,afterremoved字符串中的这些特殊字符。

更新:

您还可以使用有效的正则表达式before进行afterremoved灵活的搜索。例如下一个代码删除字母'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"
于 2012-08-24T12:27:10.937 回答
0

尝试这个:

var match = /your regex here/.exec(myString)
match = match.replace('class','')
于 2012-08-24T11:38:52.467 回答