3 回答

TA貢獻1856條經驗 獲得超5個贊
您的正則表達式應該使用全局和多標志——但除此之外,您需要檢查多個實例……像這樣:
<\s*span[^>]*>(.*?)<\s*\/\s*span\s*>
因為如前所述,您無法使用正則表達式可靠地解析 HTML——我盡了最大努力確保您仍然可以在標簽內使用樣式或屬性<span>
。IE<span style="color:#FF0000;">
仍然可以使用我提供的示例。

TA貢獻1786條經驗 獲得超13個贊
為了幫助您找到答案,您應該提供您希望用于此類工作的環境信息。
它是瀏覽器還是 node.js,你有 HTML 作為文本還是在頁面中?
我會針對您的問題提出另一種解決方案,即創建您將查詢以提取所需數據的dom 元素。
/**
?* Helper function to transform HTML string to dom element
?* @param {string} html
?* @param {string} elementType
?* @returns {HTMLDivElement}
?*/
function htmlToElement(html, elementType = 'div') {
? const template = document.createElement(elementType);
? template.innerHTML = html.trim(); // Never return a text node of whitespace as the result
? return template;
}
const htmlString = `<p nameIt="Title">Title_Test</p><figure class="t15"><table><thead><tr>
<th><span>Column1</span></th><th><span>Column2</span></th></tr></thead><tbody><tr><td><span>Entry1</span></td><td><span>Entry2</span></td><td><span>ready</span></td></tr></tbody></table></figure><p ex="ready">`;?
const element = htmlToElement(htmlString);
// extract inner text from spans as array of strings
const arrayOfWords = [...element.querySelectorAll('span')].map(span => span.innerText);
// convert array of strings to space separated string
const wordsJoinedWithSpace = arrayOfWords.join(' ');
// log a result in a console
console.log({arrayOfWords, wordsJoinedWithSpace});

TA貢獻1863條經驗 獲得超2個贊
正如所指出的,您無法使用 Regex 可靠地解析隨機 HTML。但是,假設您只想解析問題中的那種 HTML 表,這是您的正則表達式:
<span>(.*?)<\/span>
我改變了幾件事:
你沒有逃脫
/
in</span>
所以你的正則表達式實際上提前結束了我
?
在匹配任何部分中添加了一個。這樣,正則表達式將匹配最短的可能序列,因此您可以匹配所有跨度。調用
match
將匹配此正則表達式的所有出現。這也將包括<span>
/</span>
部分修剪開始和結束
<span>
部分
這是完整的例子:
var testexample = `<p nameIt="Title">Title_Test</p><figure class="t15"><table><thead><tr>
<th><span>Column1</span></th><th><span>Column2</span></th></tr></thead><tbody><tr><td><span>Entry1</span></td><td><span>Entry2</span></td><td><span>ready</span></td></tr></tbody></table></figure><p ex="ready">!aaa`;
var regex = /<span>(.*?)<\/span>/g;
var match = testexample.match(regex);
var columnContent = match.map(m => m.replace("<span>", "").replace("</span>", ""));
console.log(columnContent[0]); // Column1
console.log(columnContent[1]); // Column2
添加回答
舉報