正则表达式 - 在一个步骤中查找和替换节点之间的文本

时间:2010-08-26 16:35:30

标签: regex perl

是否可以在节点内找到所有文本并获取匹配的文本并仅使用单个正则表达式替换节点的内容?我应该说这是在一个文件中。

假设:

<x>This text</x>
<!-- Unknown number of nodes between <x> and <y> -->
<y>Junk</y>

更改为:

<x>This text</x>
<!-- Unknown number of nodes between <x> and <y> -->
<y>This text</y>

通常,我会使用正则表达式来查找x的内容并将其存储在变量中。然后,我将运行第二个正则表达式来查找y的内容并将其替换为变量的数据。只是想知道是否有“一步”解决方案......谢谢。

4 个答案:

答案 0 :(得分:3)

如果你使用JQuery,你可以这样做:

$('y').html($('x').html());

否则,使用标准JavaScript:

document.getElementsByTagName('y')[0].innerHTML = document.getElementsByTagName('x')[0].innerHTML;

答案 1 :(得分:2)

$filecontents =~ s!(<x>(?>(.*?)</x>)(?>.*?<y>))(?>.*?(</y>))!$1$2$3!s;

但是最好使用XML解析器(假设这是XML)。例如,上述内容不适用于您的示例文本,因为它会认为评论中的<y>是y标记的开头。

答案 2 :(得分:0)

如果你想要替换一个字符串,这似乎有效。

<script>
    var text = "<x>This text<x>\n<y>Junk<y>";
    var replaced = text.replace(/<x>(.*)<x>\n<y>.*<y>/s, "<x>$1</x>\n<y>$1</y>");
    alert(replaced);
</script>

答案 3 :(得分:0)

我能够和朋友联系。

regEx(假设只有一个x和一个y节点)看起来像这样。

s/X([^X]*)X([^Y]*)Y([^Y]*)Y/X\1X\2Y\1Y/

其中X是<x>,Y是<y>