Проверьте, находится ли элемент массива в строке, используя Regex в JavaScript - PullRequest
1 голос
/ 23 апреля 2020

Мне нужен простой код javascript для приложения Vue, который возьмет строку, разделит ее на массив и проверит, находится ли какое-либо значение в другой строке.

У меня есть

              let AffiliationString = " This person goes to Stony Brook"

              let affiliation = "Stony Brook OR Stony Brook University OR The University of Washington"
              let affiliations = affiliation.toLowerCase().split(" or ");
              affiliation = affiliations.join(",");
               let regexList = [ affiliation ];

               let isMatch = regexList.some(rx => rx.test(AffiliationString));

Я хочу посмотреть, есть ли какой-либо элемент в массиве в строке "AffiliationString"

При этом я получаю следующую ошибку

       Uncaught (in promise) TypeError: rx.test is not a function

Я видел много примеров в StackOverflow проверки массива, если есть значение, но не наоборот. Я пытаюсь использовать javascript - сопоставить регулярное выражение с массивом элементов

Я делаю это в Vue проекте с

         "eslint": "6.7.2",

мне нужно повторить его как al oop для каждого значения в массиве?

Спасибо за вашу помощь

1 Ответ

1 голос
/ 23 апреля 2020

Вы на самом деле не делаете RegExp из вашей строки affiliation, поэтому rx.test не является функцией. Вы можете создать RegExp, который будет сопоставляться со всеми частями строки присоединения, разделив их |. Мы заключаем каждый элемент в регулярное выражение в \b, чтобы (например) Brook не совпадало с Brooktown. Добавление флага i к RegExp делает его без учета регистра:

let AffiliationString = " This person goes to Stony Brook"
let affiliation = "Stony Brook OR Stony Brook University OR The University of Washington"
let regex = new RegExp('\\b' + affiliation.split(/\s+or\s+/i).join('\\b|\\b') + '\\b', 'i')
let isMatch = regex.test(AffiliationString)
console.log(isMatch)
...