我有以下内容; -
<--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'的值。
非常感谢
修改 实际上我试图在评论标签之间找到东西,但评论标签没有正确显示所以我不得不删除'!'。有一个独特的情况需要评论标签......如果有人知道足够的正则表达式来帮助,那就太好了。谢谢你。
答案 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注释的部分。