Regex 正则表达式不能处理类似的字符串
我正在尝试获取下面提到的字符串的开始和结束标记之间的内容Regex 正则表达式不能处理类似的字符串,regex,Regex,我正在尝试获取下面提到的字符串的开始和结束标记之间的内容 <a href="./products/" class="link">Products </a> <a href="./servicesandsolutions/" class="link">Services & Solution </a> 使用的正则表达式: <([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+
<a href="./products/" class="link">Products </a>
<a href="./servicesandsolutions/" class="link">Services & Solution </a>
使用的正则表达式:
<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)
)
对于第一个字符串,它可以正常工作,但是对于后面的字符串,它不能正常工作一次只要去掉标记即可
var str = '<a href="./products/" class="link">Products </a>'
var str2 = '<a href="./servicesandsolutions/" class="link">Services & Solution </a>'
var RE_findOpenAndCloseTag = /^<[^>]+>|<\/[^>]>$/g;
str.replace( RE_findOpenAndCloseTag, '' ) == "Products ";
str2.replace( RE_findOpenAndCloseTag, '' ) == "Services & Solution ";
var str=''
var str2=''
var RE_findopenadclosetag=/^]+>|]>$/g;
str.replace(RE_findopenadclosetag,”)=“产品”;
str2.replace(RE_findopenadclosetag“”)=“服务和解决方案”;
请注意,RE\u findopenadclosetag
假定标记始终以
,除非它关闭标记。
因此,这将失败。
“>”>这将失败
但更简单的方法是将标记转换为节点,然后获取innerHTML。通常您不想用正则表达式解析HTML,解析器更擅长于此 假设您使用的是PCRE,下面是对您要查找的表达式的随机猜测:
(?is)<([a-z]+)\b[^<>]*(?:>(.*?)</\1>|/>)
(?is)(.*?|/>)
请注意,这对嵌套标记不起作用。为什么如此复杂?简单的
/>([^取决于正则表达式的风格-使用lookahead和lookahead方法来获得>和
(?<=>)[^>]*(?=<)
(?)[^>]*(?)=
(?=试试这个,它会解决您的问题(只需添加|
)
|)
@LevLevitsky:我认为你的编辑在正则表达式中引入了几个错误。所有的反斜杠是怎么回事?恢复到原来的正则表达式。LevLevitsky,你为什么要对它进行如此重大的更改?一旦我删除了反斜杠,我就让正则表达式风暴抱怨效率低下。可能是因为它不能与第二个正则表达式一起工作,因为它是无效的是较长的-表达式中的低效性导致其超时如何工作良好?我看不出此表达式适用于您的任何示例。是否要获取标记的内容?如第一个示例中的产品,第二个示例中的服务和解决方案,与'…还有成千上万的其他情况,是的。但是我们应该(再一次)在正则表达式中重新编写HTML解析器吗-或者只是在这里解决一个简单的具体案例?关键是我们不能在了解所有细节之前完成一项任务。我在这里说过很多次:如果OP不需要通用解决方案,那么尝试构建通用解决方案是没有意义的!迭代预期用例,直到你们都得到我们需要的结果,这要简单得多。+1表示简单,尽管许多流行的正则表达式工具都不支持lookbehind(遗憾的是,Javascript就是其中之一)。。。
<([a-z0-9]+)([^<]+)*(?:>(.*?)|\D+/>|</\1>)