簡體   English   中英

正則表達式,JS:將文本匹配到特定單詞之后的行尾,而不包括匹配中的單詞

[英]Regex, JS: Match text to end of line after specific word without including word in match

我正在嘗試創建一個正則表達式來解析 Node.js 應用程序的文檔。 我創建的正則表達式匹配特定單詞后一行中的所有內容。 但是,我不知道如何從匹配中排除特定單詞。 這是有問題的,因為特定單詞本身之間可以有可變數量的空格,這意味着我不能使用向后看來排除該單詞。 如何從匹配項中排除這個詞?

https://regex101.com/r/kk7Lxe/2

僅匹配links的正則表達式是

/^\s*\|links\s*?=\s*(.*)$/m

這會將鏈接的值捕獲到捕獲組 1 中,您可以將其引用為match[1] 在 JavaScript 中,如下所示:

 const str = ` {{Song box 2 |color = black; color:#D7DA5F |image = Kokoropv.jpg |title = "'''ココロ'''" * Romaji: Kokoro * Official English: Heart |date = March 2, 2008 |views = {{v|nn|2,738,496}} |singers = [[Kagamine Rin]] act1 |producers = [[Toraboruta-P]] (music, lyrics, illustration) |links = {{l|nn|sm2500648}} {{l|mz|266689|defunct}} |links = {{l|nn|sm2500648}} {{l|mz|266689|defunct}} }} ` const match = str.match(/^\s*\|links\s*?=\s*(.*)$/m) const links = match && match[1] console.log(links)

先進的解決方案

我個人會做一個更通用的解決方案,將此列表解析為 object 並讓您根據需要輕松引用所有鍵和值:

 const getKeywordValuePairs = str => { const pattern = /^\s*\|(.*?)\s*?=\s*(.*)$/gm const result = {} let match while(match = pattern.exec(str)) { const [unused, key, value] = match result[key] = value } return result } const result = getKeywordValuePairs(` {{Song box 2 |color = black; color:#D7DA5F |image = Kokoropv.jpg |title = "'''ココロ'''" * Romaji: Kokoro * Official English: Heart |date = March 2, 2008 |views = {{v|nn|2,738,496}} |singers = [[Kagamine Rin]] act1 |producers = [[Toraboruta-P]] (music, lyrics, illustration) |links = {{l|nn|sm2500648}} {{l|mz|266689|defunct}} |links = {{l|nn|sm2500648}} {{l|mz|266689|defunct}} }} `) console.log(result) console.log(result.links)

您可以執行類似的操作,在其中匹配所需的每一行,然后使用 String#match 和 String#replace 刪除不需要的部分(也可以使用 Array#map 來轉換您之前匹配的每一行)

我最初嘗試使用reg.exec(data)但這僅與您想要第一個解決方案匹配

 const data = `{{Song box 2 |color = black; color:#D7DA5F |image = Kokoropv.jpg |title = "'''ココロ'''" * Romaji: Kokoro * Official English: Heart |date = March 2, 2008 |views = {{v|nn|2,738,496}} |singers = [[Kagamine Rin]] act1 |producers = [[Toraboruta-P]] (music, lyrics, illustration) |links = {{aaal|nn|sm2500648}} {{l|mz|266689|defunct}} |links = {{l|nn|sm2500648}} {{l|mz|266689|defunct}} }}`; const reg = /\|links\s*=\s*[^\n]+/g // destructuring same as // reg.exec(data)[1] const res = (data.match(reg)||[]).map(row=>row.replace(/\|links\s*=\s*/g, "")); console.log(res);

暫無
暫無

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

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