匹配两个HTML自定义标签之间的文本,但不匹配其他自定义标签

时间:2011-06-06 11:41:27

标签: javascript regex

我有以下内容; -

<--customMarker>Test1<--/customMarker>
<--customMarker key='myKEY'>Test2<--/customMarker>
<--customMarker>Test3 <--customInnerMarker>Test4<--/customInnerMarker> <--/customMarker>

我需要能够在customMarker标签之间替换文本,我尝试了以下方法; -

str.replace(/<--customMarker>(.*?)<--\/customMarker>/g, 'item Replaced')

哪作得好。我也想忽略自定义内部标记,不匹配或用文本替换它们。

另外,我需要一个单独的表达式来从带有Text2的标签中提取属性key ='myKEY'的值。

非常感谢

修改 实际上我试图在评论标签之间找到东西,但评论标签没有正确显示所以我不得不删除'!'。有一个独特的情况需要评论标签......如果有人知道足够的正则表达式来帮助,那就太好了。谢谢你。

3 个答案:

答案 0 :(得分:2)

最后,我做了类似以下 的事情(如果其他人需要这个。享受!!!但请注意:关于城镇的话是使用带有html标签的正则表达式并不理想,所以你的自己研究并下定决心。对我而言,必须以这种方式完成,主要是我想要的bcos,而且bcos也简化了这个例子中的工作 ); -

var retVal = str.replace(/<--customMarker>(.*?)<--\/customMarker>/g, function(token, match){
   //question 1: I would like to also ignore custom inner tags and not match or replace them with text.
   //answer:
   var replacePattern = /<--customInnerMarker*?(.*?)<--\/customInnerMarker-->/g;
   //remove inner tags from match
   match = $.trim(match.replace(replacePattern, ''));
   //replace and return what is left with a required value
   return token.replace(match, objParams[match]);

   //question 2: Also I need a separate expression to extract the value of the attribute key='myKEY' from the tag with Text2.
   //answer
   var attrPattern = /\w+\s*=\s*".*?"/g;
   attrMatches = token.match(attrPattern);//returns a list of attributes as name/value pairs in an array    

})

答案 1 :(得分:0)

您不能使用<customMarker>吗?然后你可以使用getElementsByTagName('customMarker')并从中获取内部文本和子元素。

答案 2 :(得分:0)

正则表达式仅匹配项目。一旦你说了匹配,你可以用它做什么。这是大多数人使用正则表达式的问题的一部分,他们尝试并结合三个不同的步骤。正则表达式匹配只是第一步。

单个正则表达式无法满足您的要求。如果你想使用正则表达式,你将需要一个迷你状态机。也就是说,围绕匹配的逻辑包装器使得它移动通过每个逻辑部分。

我建议你在标准api中查看预构建的引擎来解析html,而不是自己编译。如果您确实需要这样做,请阅读flex manual以基本了解正则表达式的工作方式,以及使用它们构建的状态机。最好的例子是关于匹配多行c注释的部分。