改进HTML-Tagname-strip的正则表达式

时间:2014-10-09 14:01:11

标签: javascript jquery html css regex

下面是一些字符串,应该作为我的HTML代码。 我正在尝试从下面的字符串或HTML-Code分隔HTML-Tagname。对字符串进行处理后,结果应如下所示:=div=div=strong=em=p=b=p=p=h4=h1=span=。 这是变量“sTagName”中的HTML代码:

var sTagName = 'abc<div style="left:100px;" > some <div>MyText, <strong> hgz uz <em> Some text for flrdm <p><b>b,  <p> <p><h4><h1><span id="MySpan">any text, ';

这是我的解决方案:

// Remove all attributes, e.g. <div style="left:100px;" > will be converted to <div>
sTagName = sTagName.replace(/<([a-zA-Z0-9]+).*?>.*?/g, '<$1>' );
// I add the "<>" at end of HTML-Code in order to remove the last useless string, I mean "Any text, "
sTagName = sTagName + "<>";
sTagName = sTagName.replace(/.*?<(.*?)>.*?/g,'=$1');

alert(sTagName);

函数alert(sTagName)提供预期结果。 但是我希望改进我的方法指的是性能。例如。我想从两个RegEx构建一个RegEx,或类似的东西。 任何的想法?提前谢谢。

4 个答案:

答案 0 :(得分:1)

enter image description here

使用DOM:

var sTagName = 'abc<div style="left:100px;" > some <div>MyText, <strong> hgz uz <em> Some text for flrdm <p><b>b,  <p> <p><h4><h1><span id="MySpan">any text, ';


tags = $("<div>").html(sTagName).find("*").map(function() {
  return this.nodeName;
}).toArray();

document.write(tags);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:1)

你可以这样做:

var sTagName = 'abc<div style="left:100px;" > some <div>MyText, <strong> hgz uz <em> Some text for flrdm <p><b>b,  <p> <p><h4><h1><span id="MySpan">any text, ';

var arr = new Array;
var result;
var re = /<(\w+)/g;

while ((m = re.exec(sTagName)) !==null) {
    arr.push(m[1]);
}

result = '=' + arr.join('=') + '=';

console.log(result);

答案 2 :(得分:1)

尝试

sTagName = $.map(sTagName.split(/[^<\w+]/), function(v, k) {
  return /</.test(v) ? v.replace(/[a-z]+<|</g, "=") : null
}).join("").concat("=");

var sTagName = 'abc<div style="left:100px;" > some <div>MyText, <strong> hgz uz <em> Some text for flrdm <p><b>b,  <p> <p><h4><h1><span id="MySpan">any text, ';

sTagName = $.map(sTagName.split(/[^<\w+]/), function(v, k) {
  return /</.test(v) ? v.replace(/[a-z]+<|</g, "=") : null
}).join("").concat("=");

$("body").text(sTagName)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

答案 3 :(得分:0)

<(\w+)\s*[^>]*>|.(?=([^><]*<[^>]*>)*[^<>]*$)

尝试使用$1替换。稍后将=附加到每个结果。

参见演示。

http://regex101.com/r/qZ0uP0/2