[英]Javascript regex to replace <ul> or <ol> with only text within <li> tag
因此,假設我有一個字符串形式的有序或無序列表。 我只需要返回包含在相應父元素的每個列表項中的文本:
<ul>
<li>Example One</li>
<li>Example Two</li>
</ul>
我已經完成了這項工作,但顯然效率不高:
var first = string.replace(/.*<li>(.*)<\/li>.*/g, '$1');
var second = first.replace(/(<ul>|<ol>|<\/ol>|<\/ul>)/g, '');
Output 是我所期望的,但我知道有一種正則表達式格式可以立即完成,但我在正則表達式方面仍然很綠色,所以不確定我做錯了什么。 這是我認為可行的:
var newString = string.replace(/(<ul>|<ol>).*<li>(.*)<\/li>.*(<\/ul>|\/<ol>)/g, '$2');
但是,這會將整個 HTML 結構作為字符串返回:
<ul>
<li>Example One</li>
<li>Example Two</li>
</ul>
和往常一樣,我的朋友們,提前謝謝你們。
您可以將正則表達式拆分為/((<ul>|<ol>)|<li>(.*)<\/li>|(<\/ul>|<\/ol>))/g
模式,下面的例子你非常接近。
const template = `<ul> <li>Example One</li> <li>Example Two</li> </ul>` const str = template.replace(/((<ul>|<ol>)|<li>(.*)<\/li>|(<\/ul>|<\/ol>))/g, '$3'); console.log(str);
編輯說明:
總模式((<ul>|<ol>)|<li>(.*)<\/li>|(<\/ul>|<\/ol>))
減號修飾符成為第一個捕獲組(將保存從子組傳遞的任何東西)。
我們在第一個捕獲組(<ul>|<ol>)
<li>(.*)<\/li>
<\/ul>|<\/ol>
中提供了 3 個備選方案
對於備選方案 1,它必須完全匹配<ul>
或<ol>
並且它也在捕獲組 2。
對於備選方案 2,它必須匹配 <li <li>
ANYTHING </li>
的<li>(.*)<\/li>
/li> , .*
成為捕獲組 3,因為它包含在括號()
中。
對於備選方案 3,它必須完全匹配</ul>
或</ol>
並且它也在捕獲組 4。
所以跑下來:
<ul>
匹配組(0:一切,1:父,2: <ul>|<ol>
)又名 [ <ul>
, <ul>
, <ul>
]
<li>Example One</li>
匹配組(0:所有,1:父,2:不匹配,3: <li>(.*)<\/li>
)又名 [ <li>Example One</li>
, <li>Example One</li>
,null, Example One
]
最后一部分的作業:p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.