簡體   English   中英

返回模式最后一次出現的次數

[英]Return number of the last occurrence of a pattern

我正在嘗試在 HTML 代碼中最后一次出現的模式中獲取一個數字,但沒有成功。 模式是data\\\\[\\d{1,3}\\\\] 我怎樣才能得到下面例子中的數字03

<body>
<h2>JavaScript Regular Expressions</h2>
<p>TEST</p>
<p>data[01]</p>
<button onclick="myFunction()">Try it</button>
<p>data[02]</p>
<p>TEST</p>
<p id="demo" test=data[03]></p>
</body>

我用 $ 嘗試了很多組合,但我無法讓它工作。

您可以使用否定前瞻斷言

/data\[(\d{1,3})\](?![\s\S]*data\[\d{1,3}\])/
  1. data\\[(\\d{1,3})\\]用於匹配您的模式, (...)用於捕獲數字值。
  2. (?![\\s\\S]*data\\[\\d{1,3}\\])是否定的前瞻斷言,在當前情況下,這有助於匹配任何不遵循相同格式的data-{digit}格式字符串在那之后的任何地方格式化。 其中[\\s\\S]用於匹配自. 不包括換行符。

 const data = `data<body> <h2>JavaScript Regular Expressions</h2> <p>TEST</p> <p>data[01]</p> <button onclick="myFunction()">Try it</button> <p>data[02]</p> <p>TEST</p> <p id="demo" test=data[03]></p> </body>` console.log(data.match(/data\\[(\\d{1,3})\\](?![\\s\\S]*data\\[\\d{1,3}\\])/)[1])

詳細的正則表達式解釋和演示在這里


更新:如果它始終是p標記的test屬性值,那么您可以使用DOMParser或虛擬 DOM 元素來實現這一點,因為 RegExp 不是解析 HTML 的好方法。

REF: 使用正則表達式解析 HTML:為什么不呢?

  1. 使用DOMParser

 const data = `data<body> <h2>JavaScript Regular Expressions</h2> <p>TEST</p> <p>data[01]</p> <button onclick="myFunction()">Try it</button> <p>data[02]</p> <p>TEST</p> <p id="demo" test=data[03]></p> </body>` var parser = new DOMParser(); var doc = parser.parseFromString(data, "text/html"); console.log(doc.querySelector('p#demo').getAttribute('test').match(/\\d+/)[0])

  1. 創建虛擬元素

 const data = `data<body> <h2>JavaScript Regular Expressions</h2> <p>TEST</p> <p>data[01]</p> <button onclick="myFunction()">Try it</button> <p>data[02]</p> <p>TEST</p> <p id="demo" test=data[03]></p> </body>` // create a dummy element and set content var div = document.createElement('div'); div.innerHTML = data; console.log(div.querySelector('p#demo').getAttribute('test').match(/\\d+/)[0])

JS .match()返回一個數組,因此只需從中獲取最后一個數組項: arr[arr.length - 1]

 var htmlString = document.body.innerHTML; var match = htmlString.match(/data\\[\\d{1,3}\\]/g); console.log("ALL MATCHES", match); if (match) { console.log("LAST MATCH", match[match.length - 1]); }
 <body> <h2>JavaScript Regular Expressions</h2> <p>TEST</p> <p>data[01]</p> <button onclick="myFunction()">Try it</button> <p>data[02]</p> <p>TEST</p> <p id="demo" test=data[03]></p> </body>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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