[英]Regex to split HTML by Tags which text contain less that n characters
我想用<p>
標記分割以下字符串,這些標記包含少於4個字符的文本。 假設使用正則表達式<p>1</p>
, <p>2</p>
。
<span id="_ctl0_contentMain__kDP_dp_Text" class="kDPText">
<p>1</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
<p>2</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
</span>
以下正則表達式將<p>...</p>
與標簽之間的最多三個字符匹配:
<p>.{0,3}<\/p>
演示:
var input = `<span id="_ctl0_contentMain__kDP_dp_Text" class="kDPText"> <p>1</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p>2</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> </span>`; console.log(input.split(/<p>.{0,3}<\\/p>/));
如果要使用正則表達式,可以使用類似於此代碼的內容。
var string_to_split= document.getElementById("_ctl0_contentMain__kDP_dp_Text").innerHTML
var your_regExp = new RegExp("<p>.{0,3}<\/p>","ig");
var result = string_to_split.split(your_regExp).filter(function(x) {return x.trim().length;});
如果您不想訴諸RegEx,則可以使用像這樣的腳本(仍然是普通的javascript,但是在較舊的瀏覽器[ie8]中,您應該對querySelectorAll
使用polyfill):
var allParagraph = document.querySelectorAll("#_ctl0_contentMain__kDP_dp_Text > p");
var split_para = Array.prototype.reduce.call(
allParagraph,
function(acc, x) {
if (x.innerHTML.length < 4) {
acc.unshift([]);
} else {
acc[0].push(x);
}
return acc;
},
[]
).reverse();
當然,第一個解決方案比較簡單,但是在結果變量中有一個字符串,split_para數組將原始段落分成根據拆分規范分組的數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.