Javascript 如何替换非html标记的特定子字符串
我想在下面的内容中将“红色”和“td”替换为“蓝色”,但我不希望最后一个Javascript 如何替换非html标记的特定子字符串,javascript,regex,Javascript,Regex,我想在下面的内容中将“红色”和“td”替换为“蓝色”,但我不希望最后一个和所有标记的颜色属性被弄乱 <tr> <td>Code name td A001</td> <td>Madam Red</td> <td><font color="red">do your job</font></td> </tr> 代号td A001 瑞德夫人 做好你的工作
和所有
标记的颜色属性被弄乱
<tr>
<td>Code name td A001</td>
<td>Madam Red</td>
<td><font color="red">do your job</font></td>
</tr>
代号td A001
瑞德夫人
做好你的工作
这就是我想要的:
<tr>
<td>Code name blue A001</td>
<td>Madam blue</td>
<td><font color="red">do your job</font></td>
</tr>
代号蓝色A001
蓝夫人
做好你的工作
但我在使用/.*(红色| td.*/gi
替换内容时得到了这个结果
<tr>
<blue>Code name blue A001</blue>
<blue>Madam blue</blue>
<blue><font color="blue">do your job</font></blue>
</tr>
代号蓝色A001
蓝夫人
做好你的工作
有没有正则表达式可以解决这个问题
谢谢。这是一个黑客程序,但它可以工作。它需要几次迭代的替换 步骤1:在有标记或目标词(td或红色)的任何位置为文本添加标记。仅将标签放回替换件中;目标词被省略,仅由标记本身代替 搜索:
(]+>)|(\btd\b |\breed\b)
替换:$1@MARKER@
临时结果:
<tr>@MARKER@
<td>@MARKER@Code name @MARKER@ A001</td>@MARKER@
<td>@MARKER@Madam @MARKER@</td>@MARKER@
<td>@MARKER@<font color="red">@MARKER@do your job</font>@MARKER@</td>@MARKER@
</tr>@MARKER@
<tr>
<td>Code name @MARKER@ A001</td>
<td>Madam @MARKER@</td>
<td><font color="red">do your job</font></td>
</tr>
步骤3:用“蓝色”替换(从结果字符串中)任何剩余的标记
搜索:@MARKER@
替换:
blue
这里有一个技巧,只需一次即可替换:
((?!<\/td)[^<]|^)(?:td|red)(?![^<]*>)
看
示例代码:
var re = /((?!<\/td)[^<]|^)(?:td|red)(?![^<]*>)/ig;
var str = '<tr>\n <td>Code /td name td A001</td>\n <td>Madam Red</td>\n <td><font color="red">do your job</font></td>\n</tr>';
var subst = '$1blue';
var result = str.replace(re, subst);
var re=/(?!请注意Scott Kaye posted.Regex不是解析或操作HTML的好工具
我创建了一个,演示了一种非常不同的方法。我的方法涉及到一个非常小的DOM walker。您为它提供一个节点,它从该节点开始遍历DOM,并使用它访问的各种节点返回到您的函数。DOM walker实现只是被放在一起,我确信它非常需要改进是的,但它适用于这种情况。您可以这样称呼它:
var dw = new DomWalker();
dw.on('text', function(node) {
node.nodeValue = node.nodeValue.replace(/red|td/ig, 'blue');
});
dw.walk(document.getElementById('myRow'));
注意,尽管我仍然在这里使用正则表达式,但我只在纯文本字符串上使用正则表达式
如果没有其他东西,它应该给你一个选择来尝试。使用td
以外的东西作为颜色的占位符怎么样?'code name{color}a001'。替换({color},'blue'))
regex有HTML格式。@Cerbrus我也想将蓝色替换为黄色,所以我不能使用占位符。很好。比我的方式简单得多!非常感谢。这就是我想要的!
<tr>
<td>Code /blue name blue A001</td>
<td>Madam blue</td>
<td><font color="red">do your job</font></td>
</tr>
var dw = new DomWalker();
dw.on('text', function(node) {
node.nodeValue = node.nodeValue.replace(/red|td/ig, 'blue');
});
dw.walk(document.getElementById('myRow'));