const patt = /<([a-z0-9]+)\s+class="span-class">([\s\S]*?)<\/\1>/ig;
console.log([...`<span class="span-class"> Example 1 </span>`.matchAll(patt)][0]);
console.log([...`<div class="span-class"> Example 2 </div>`.matchAll(patt)][0]);
console.log([...`<h4 class="span-class"> Example 3 </h4>`.matchAll(patt)][0]);
console.log([...`<h4 class="span-class"> No match - no matching tags! </h5>`.matchAll(patt)][0]);
1条答案
按热度按时间eh57zj3b1#
解析HTML是很棘手的,但是对于您知道会受到限制的事情,只要可能的HTML标记名、属性和类名不失控,它就可以很好地工作。您的代码实际上对我来说似乎可以正常工作,除了我做了一个小的更改,以转义结束
</span>
标记上的斜杠<span\s+class="span-class">([\s\S]*?)<\/span>
个在https://regexr.com/7hqgr或更低版本的JS中查看它的实际操作
字符串
不确定您是否需要它,但是允许任何标记名称与匹配的结束标记的替代方法是在模式中使用反向引用
<([a-z0-9]+)\s+class="span-class">([\s\S]*?)<\/\1>
个https://regexr.com/7hqgl的
型