RegExp替换在再次替换时导致错误结果

时间:2018-01-21 05:51:35

标签: javascript regex string

我的字符串"<p>Stacked" 我想将其替换为&#34;&lt; font color =&#39;蓝色&#39;&gt;&lt;&lt; / font&gt; p&lt; font color =&#39; blue&#39;&gt;&gt;&lt; / font&gt;堆叠

所以我用过这个:⬇

var rox = /([<])([a-z1-9]+)([>])/;


function testInfo(phoneInput){ 
    var startTag = "<font color='blue'>";
    var endTag = "</font>";
    var OK = phoneInput.value.replace(rox, function(x){
        var lt = x.replace(/([<])/, startTag+'&lt;'+endTag);
        var gt = lt.replace(/([>])/ , startTag+'&gt;'+endTag);
        return gt;
    });

它会像这样返回

<font color='blue'<font color='blue'>p<font color='blue'>&gt;</font>

这意味着当我更换

堆栈第一次更换

 **<font color='blue'>&lt;</font>p<font color='blue'>&gt;</font>** But next time it is replacing the **">"** of the *font tag*. Lot *">"* of **p tag**.

问题

<小时/>

我该如何解决?我正在尝试着色/突出显示代码。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

&#13;
&#13;
str = `<p>Stacked`;
const subst1 = `LT_LTfont color=' blue'GT_GT&lt;`;
const subst2 = `LT_LTfont color=' blue'GT_GT&gt;`;
str = str.replace(/</g, subst1);
str = str.replace(/>/g, subst2);

str = str.replace(/GT_GT/g,`>`);
str = str.replace(/LT_LT/g,`<`);

$("#kk").html(str);
console.log(str);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="kk">

</div>
&#13;
&#13;
&#13;