使用javascript正则表达式在大文本中查找首字母缩写词

时间:2019-01-30 19:23:25

标签: javascript regex

我有一个很大的文字,里面有一些缩写。所有首字母缩写词都用括号括起来,并用大写字母表示。在括号之前,总是有与括号中以相同字母开头的字母相同数量的单词。但是,这些单词可能不能以大写字母开头。

例如:

bla bla雷达横截面(RCS)bla bla ...

bla bla雷达横截面(RCS)bla bla ...

我需要列出所有首字母缩写词。我应该如何开始?

3 个答案:

答案 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]+[\)]