Поиск сокращений в большом тексте с использованием регулярных выражений javascript - PullRequest
0 голосов
/ 30 января 2019

У меня большой текст, в котором есть некоторые сокращения.Все сокращения указаны в скобках и заглавными буквами.Перед скобками всегда содержится то же количество слов, что и в скобках, начиная с одинаковых алфавитов.Однако слова не могут начинаться с заглавных букв.

Пример:

сечение радиолокатора бла-бла (RCS) бла-бла ...

бла-бла Сечение радара(RCS) бла бла ...

Мне нужно перечислить все сокращения.Как начать?

Ответы [ 3 ]

0 голосов
/ 30 января 2019

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)
0 голосов
/ 31 января 2019

Вот одна возможность.Он возвращает объект, ключи которого являются аббревиатурами, а значения - совпадающими предыдущими словами (без какой-либо попытки нормализовать их для использования заглавных букв).

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 для этого результата.

0 голосов
/ 30 января 2019

Вот что вы могли бы сделать:

[\([A-Z]+[\)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...