簡體   English   中英

Javascript 正則表達式替換<ul>或者<ol>里面只有文字<li>標簽</li></ol></ul>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM