【问题标题】:regex replace characters within tags正则表达式替换标签中的字符
【发布时间】:2013-06-12 21:14:50
【问题描述】:

我已经在使用 html 解析器,但我需要创建一个正则表达式,它将选择 <code> 标记的第一个实例中的 符号 - 在本例中,是具有类“html”的那个。

    <code class="html">
        <b>test</b><script>lol</script>
            <code>test</code> <b> test </b>
        <lol>
                        </lol>

            <test>
    </code>

因此,缩进区域内从&lt;b&gt; 到最后一个&lt;/code&gt; 开始的每个 都应该被替换,只留下外部&lt;code&gt; 标记。

我正在使用 javascript 的 .replace 方法,并希望代码区域内的所有 符号都变成 ascii <和 >.

我想最好使用 $1 等使用前瞻/后退正则表达式,但不知道从哪里开始,因此非常感谢任何帮助。

【问题讨论】:

  • 难道您不能使用您已经在使用的 HTML 解析器获取 &lt;code&gt; 内容并进行常规替换吗?这听起来不像是可靠的正则表达式领域。
  • 为什么不尝试使用jquery`s的.text('new text')
  • 尝试使用正则表达式解析 HTML 将 drive you insane.
  • @user2000008 - 该帖子没有帮助。正如 OP 在帖子中非常清楚地指出的那样,他并没有试图解析(这已经完成) - 他只是试图逃避 &lt;&gt; 字符。

标签: javascript jquery regex


【解决方案1】:

这样的事情怎么样?在这个例子中,我创建了一个变量并用 html 填充变量,只是为了让事情开始

var doc = document.createElement( 'div' );
doc.innerHTML =  ---your input html here

这里我拉代码标签

var string = doc.getElementsByTagName( 'code' ).innerHTML; 

获得字符串后,只需将所需的括号替换为

var string = string .replace(/[<]/, "&#60;)
var string = string .replace(/[>]/, "&#62;)

然后只需将替换的值重新插入到您的源 html 中

【讨论】:

    【解决方案2】:

    简单的方法:

    var elem = $('.html');
    elem.text(elem.html());
    

    这不一定使用字面意义上的&amp;#60; 进行转义;不过,如果您对不同的逃生方式感到满意,那么它比您可以做的任何事情都简单得多。

    如果您有多个这样的元素,您可能需要将第二行包含在 elem.each() 中;否则html() 方法可能只会连接所有元素的内容或类似的无意义的东西。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多