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

match text between two html custom tags but not other custom tags

本文关键字:自定义 文本 其他 不匹配 之间 两个 html      更新时间:2023-09-26

我有如下内容;-

<--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'的值。

非常感谢

编辑事实上,我试图在评论标签之间找到东西,但评论标签没有正确显示,所以我不得不删除"!"。有一种特殊情况需要注释标签。。。无论如何,如果有人知道足够的regex来提供帮助,那就太好了。感谢u.

最后,我做了如下(以防其他人需要。享受吧!!但请注意:关于城镇,使用带有html标签的regex并不理想,所以请自己研究并下定决心。对我来说,必须这样做,主要是因为我想这样做,但也因为它简化了本例中的工作);-

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    

})

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

正则表达式只匹配一个项。一旦你说了match,那就取决于你如何使用它。这是大多数人使用正则表达式时遇到的问题的一部分,他们会尝试将这三个不同的步骤结合起来。正则表达式匹配只是第一步。

使用一个正则表达式将无法实现您所要求的内容。如果你想使用正则表达式,你需要一个迷你状态机。也就是说,一个围绕匹配的逻辑包装器,使其在每个逻辑部分中移动。

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