我有一个很大的文字,里面有一些缩写。所有首字母缩写词都用括号括起来,并用大写字母表示。在括号之前,总是有与括号中以相同字母开头的字母相同数量的单词。但是,这些单词可能不能以大写字母开头。
例如:
bla bla雷达横截面(RCS)bla bla ...
bla bla雷达横截面(RCS)bla bla ...
我需要列出所有首字母缩写词。我应该如何开始?
答案 0 :(得分:2)
这是一种可能性。它会返回一个对象,该对象的键是缩写词,值是匹配的前一个单词(不尝试将它们标准化为大写形式)。
const findAcronyms = (str) => {
const words = str.split(/\s+/)
return words.reduce((all, word, i) => {
const isCandidate = word.match(/\([A-Z]+\)/)
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"
不包含在结果中,因为它与前面的文本不匹配。
如果您只想使用实际的缩写词,而没有其代表什么意思,则可以将返回值修改为数组,也可以简单地对这个结果运行Object.keys
。
答案 1 :(得分:1)
const str = "bla bla radar cross section (RCS) bla bla...(aaaaaa) stack overflow (SO)",
acronymes = [],
result = str.match(/\(([A-Z].*?)\)/g).map(val => {
acronymes.push(val.substr(1, val.length - 2));
});
console.log(acronymes)
答案 2 :(得分:-1)
这是您可以做的:
[\([A-Z]+[\)]