【问题标题】:regex check certain tags正则表达式检查某些标签
【发布时间】:2018-10-03 09:01:33
【问题描述】:

我想检查某些标签是否包含在传递的字符串值中,或者不排除 ap 标签。

对于示例输入:

<p><a href="fdssadfafads" target="_blank">aaa<span>dddd</span></a>bbb</p><span>ccc</span>

结果应该是:

false

因为输入包含span标签。

现在,我尝试了一些 regexp 像这样:

<(?!/?(p|a)(>|\s))[^<]+?>

但这对我不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • 你还没有解释你想在这里实现什么......你的问题根本不清楚......
  • 如果你想匹配&lt;span&gt;标签,只需在你原来的正则表达式中转义斜线字符:&lt;(?!\/?(p|a)(&gt;|\s))[^&lt;]+?&gt;
  • 所以基本上,如果输入不包含&lt;span&gt;...&lt;/span&gt;,您希望得到true,对吧?

标签: javascript regex typescript tags


【解决方案1】:

你可以试试这个正则表达式:

(?<=<span>)(?:.*?)(?=<\/span>)

像这样:

regex = "(?<=<span>)(?:.*?)(?=<\/span>)";

str = "<p><a href=\"fdssadfafads\" target=\"_blank\">aaa<span>dddd</span></a>bbb</p><span>ccc</span>";
str2 = "There is no tag"

found = str.search(regex)==-1?false:true;
found2 = str2.search(regex)==-1?false:true;

document.write("'span' tags found - "+found);
document.write(" and 'span' tags found - "+found2);

解释-

(?&lt;=&lt;span&gt;) - 如果文本前面有 &lt;span&gt;
(?:.*?) - 告诉系统可能有零的非捕获组,告诉正则表达式系统匹配文本开始和结束 span 标记之间的或多个字符
(?=&lt;\/span&gt;) - 确保匹配后跟 &lt;/span&gt; 标记的正向预测

found = str.search(regex)==-1?false:true; 是三元运算符 - 如果搜索正则表达式的结果为 -1(未找到),则结果存储 false

注意 - 上面的代码在搜索输入中是否存在开始和结束跨度标签时工作正常,这是我假设 OP 想要的。
但是,问题不清楚,可能无法满足某些所需的规格。

【讨论】:

    【解决方案2】:

    如果可以选择不使用正则表达式(因为不建议使用parse html with regex),您可以使用DOMParserquerySelectorAll 来获取正文中的所有元素。然后检查是否存在不是ap 的元素。

    let elms = ['p', 'a'];
    let htmlInvalid = `<p><a href="fdssadfafads" target="_blank">aaa<span>dddd</span></a>bbb</p><span>ccc</span>`;
    let htmlValid = `<p><a href="fdssadfafads" target="_blank">aaa`;
    
    function isHtmlValid(strHtml, allowedElements) {
      let parser = new DOMParser();
      let doc = parser.parseFromString(strHtml, "text/html");
      let elements = doc.querySelectorAll('body *');
      for (let i = 0; i < elements.length; ++i) {
        if (allowedElements.indexOf(elements[i].nodeName.toLowerCase()) < 0) {
          return false;
        }
      }
      return true;
    }
    
    console.log(isHtmlValid(htmlInvalid, elms));
    console.log(isHtmlValid(htmlValid, elms));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多