【问题标题】:Match everything except a specific pattern in JavaScript匹配 JavaScript 中除特定模式之外的所有内容
【发布时间】:2017-03-15 13:03:17
【问题描述】:

经过大量搜索,我仍然感到困惑。我如何匹配字符串中的所有内容,除了匹配给定模式的内容。

我找到了使用 ^ 或否定前瞻来否定特定单词或字符集的解决方案,但我需要一个解决方案来否定任何与特定模式匹配的内容。

示例文本(html 的 sn-p):

abcd efg hijkl <span class='skipMe'>xxx</span> nop qrst uv wxyz.

我想匹配除整个 span 标签之外的所有内容。即除

之外的所有内容
/<span.*?<\/span>/

感谢任何潜在客户。

【问题讨论】:

  • 您的目标是获取没有该标签的字符串吗?在这种情况下,您可以执行以下操作:str.replace(/&lt;\/?[^&gt;]+(&gt;|$)/g, "")

标签: javascript regex


【解决方案1】:

你总是可以像这样在正则表达式上分割你的文本:

var text = 'abcd efg hijkl <span class="skipMe">xxx</span> nop qrst uv wxyz.'

console.log(
  text.split(/<span.*?<\/span>/)
)

【讨论】:

    【解决方案2】:
    console.log('abcd efg hijkl <span class=\'skipMe\'>xxx</span> nop qrst uv wxyz.'.replace(/<(|\/)span[^>]*>/g, ''));
    
    //OR variant #2
    
    console.log('abcd efg hijkl <span class=\'skipMe\'>xxx</span> nop qrst uv wxyz.'.replace(/\s<span.+span>?/g, ''));
    

    SEE

    【讨论】:

      【解决方案3】:

      以这种方式使用正则表达式非常幼稚,并且容易产生不必要的副作用。我的建议是使用内置的 DOM API。

      创建一个包装器元素,将innerHTML 属性的值设置为输入字符串,查询包装器元素的相关元素,删除相关元素,然后返回innerHTML 属性的值。

      这是一个例子:

      const input = "abcd efg hijkl <span class='skipMe'>xxx</span> nop qrst uv wxyz.";
      
      const func = input => {
          const wrapper = Object.assign(document.createElement('div'), { innerHTML: input });
          wrapper.querySelector('.skipMe').remove()
          return wrapper.innerHTML;
      };
      
      console.log(func(input));

      这种方法的一个警告是 HTML 被传递给解析器,所以如果 HTML 无效,scary things will happen

      【讨论】:

        猜你喜欢
        • 2010-12-13
        • 2021-03-22
        相关资源
        最近更新 更多