[英]Finding acronyms in a big text using javascript regex
我有一個很大的文字,里面有一些縮寫。 所有首字母縮寫詞都用括號括起來,並用大寫字母表示。 在括號之前,總是有與括號中以相同字母開頭的字母相同數量的單詞。 但是,這些單詞可能不能以大寫字母開頭。
例如:
bla bla雷達橫截面(RCS)bla bla ...
bla bla雷達橫截面(RCS)bla bla ...
我需要列出所有首字母縮寫詞。 我應該如何開始?
這是一種可能性。 它返回一個對象,其鍵是首字母縮寫詞,值是匹配的前一個單詞(不嘗試將它們標准化為大寫形式)。
const findAcronyms = (str) => { const words = str.split(/\\s+/) return words.reduce((all, word, i) => { const isCandidate = word.match(/\\([AZ]+\\)/) if (!isCandidate) {return all} const letters = word.split('').slice(1, -1) const acro = letters.join('') if (i - letters.length < 0) {return all} if (words.slice(i - letters.length, i) .map(s => s[0]).join('') .toLowerCase() !== acro.toLowerCase()) { return all } return { ...all, [acro]: words.slice(i - letters.length, i).join(' ') } }, {}) } const str = 'bla bla radar cross section (RCS) but this one (IN) is not And This One (ATO) is' console.log(findAcronyms(str)) //~> // { // RCS: "radar cross section", // ATO: "And This One" // }
請注意,結果中不包含"IN"
,因為它與前面的文本不匹配。
如果您只想使用實際的首字母縮寫詞而沒有其代表的含義,則可以將return修改為一個數組,也可以僅在此結果上運行Object.keys
。
const str = "bla bla radar cross section (RCS) bla bla...(aaaaaa) stack overflow (SO)", acronymes = [], result = str.match(/\\(([AZ].*?)\\)/g).map(val => { acronymes.push(val.substr(1, val.length - 2)); }); console.log(acronymes)
這是您可以做的:
[\([A-Z]+[\)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.