Regex.exec показывает только первый случай - PullRequest
0 голосов
/ 30 ноября 2018

Я использую следующее регулярное выражение:

\b([a-zäöüßA-ZÄÖÜ][^\s]*)

Для строки "Choriner Straße 12", которая соответствует "Choriner Straße", если я проверяю ее, например, в regex101.это именно то, что мне нужно.Но если я использую его в своем коде с

regex.exec("Choriner Straße 12")

Код:

const street_regex = new RegExp('\\b([a-zäöüßA-ZÄÖÜ][^\\s]*)/g');

Возвращается просто "Choriner".Я не знаю, что случилось ... не могли бы вы помочь мне, пожалуйста?

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Хорошо, я узнал, что не твои регулярные выражения не работают, а мой код.Я нашел правильное регулярное выражение, но есть еще одна проблема.Это код:

const regex = /\b([a-zäöüßA-ZÄÖÜ][^\s]+)/g;
const str = `Choriner Straße 12`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    for (var i = 0; i < m.length; i++) {
      console.log(i,m)
    }
}

Это результат на моей консоли (цикл for):

["Choriner", "Choriner", индекс: 0,вход: "Choriner Straße 12", группы: не определено] runner-4.1.7.min.js: 1 1 (2) ["Choriner", "Choriner", индекс: 0, вход: "Choriner Straße 12", группы:undefined] runner-4.1.7.min.js: 1 0 (2) ["Straße", "Straße", индекс: 9, ввод: "Choriner Straße 12", группы: не определено] runner-4.1.7.min.js: 1 1 (2) ["Straße", "Straße", индекс: 9, ввод: "Choriner Straße 12", группы: не определено]

Как вы можете видеть, регулярное выражение точно соответствует тому, чтоЯ хочу, но мне нужны спички как одно слово ...

0 голосов
/ 30 ноября 2018

Вот рабочий пример использования синтаксиса /regex/:

var regex = /\b([a-zäöüßA-ZÄÖÜ][^\s]*)/g

while((match = regex.exec("Choriner Straße 12")) !== null) {
    console.log('The full match object:', match);
    console.log('The actual result:', match[0]);
}
0 голосов
/ 30 ноября 2018

Ну, если я правильно понимаю ваши вопросы, это должно подойти.

const getAddressWithoutNumber = fullAddress => {
  const result = /(?![\s\d].+).+?(\S+).+(?=\s\d.+)/igm.exec(fullAddress);
  return result && result[0] || null;
}

console.log(getAddressWithoutNumber('123 Choriner Straße 12')); // outputs "Choriner Straße"
0 голосов
/ 30 ноября 2018

См. документацию MDN для функции RegExp .

new RegExp(pattern[, flags])

Флаги необходимо передавать в качестве второго аргумента, а также с /FLAGS вконец выражения.

const street_regex = new RegExp('\\b([a-zäöüßA-ZÄÖÜ][^\\s]*)', 'g');

… но вы не должны использовать функцию конструктора RegExp.Экранирование строки делает чтение ужасным и не дает никаких преимуществ по сравнению с простым литералом регулярного выражения.

const street_regex = /\b([a-zäöüßA-ZÄÖÜ][^\s]*)/g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...