正则表达式用html文档中的JavaScript替换某些类名

时间:2014-12-01 19:43:32

标签: javascript regex node.js

我正在尝试删除所有以下划线结尾的类名。所以:

<div class="foo bar_ baz boo_ fa"> </div>

会输出:

<div class="foo baz fa"> </div>

我正在尝试在JavaScript中执行此操作,到目前为止,如果输入仅包含没有其他内容的字符串,我可以这样做:

```Node.js
var input = "foo bar_ baz boo_ fa";
input = input.replace(/(\w*[^ ])(?=_)(_)/g, "");

输出:

foo  baz  fa

我猜我没有正确使用前瞻。我希望我可以这样:

input = input.replace(/class\s*=\s*["'](\w*[^ ])(?=_)(_)/g, "");

计划的总体目标:

该脚本的目的是阅读html文档并删除&#34; bad&#34;整个文件中的类名......

1 个答案:

答案 0 :(得分:2)

我尝试了/[^\s]+_(?: +|$)/g,它匹配任何以下划线结尾的类和所有尾随空格(如果有的话)。这应该适合您的替换。

编辑: 由于你的字符串比我想象的更复杂,试试这个。

//get our test string
var input = "<div style=\"crazy_omg nowai_    \" class = \"bar_ baz boo1_              fa fsfs_ joined_name joined-name  \"></div><input class= \"eh_\" CLASS ='WUT_ WINSD_ SKJDJASD_Jkzsd' class=ok_    bugs='existing' class=biiii_ /> <div class=fndjkdf /> <span style='color:red' class=jkndndfd_ /></span></div>",
//build our regular expressions
attrMatcher = /(?:class *= *[\'\"]{0,1})((?:[\w -](?!\w+=|\/))+)[\'\"]*/gi,
classMatcher = /[^\s]+_(?: +|$)/g;

//if we find a class, check it for errors
var result = input.replace(attrMatcher, function(full, capture){
    //remove errors and return
    return "class=\""+capture.replace(classMatcher, '') + "\"";
});

行动中的小提琴:click

我希望有所帮助。