Я тренируюсь с регулярными выражениями. Я нашел отличный ответ здесь, на StackOverflow:
Как получить все совпадения для регулярного выражения в JavaScript?
Я скопировал код из проверенного ответа и вставил его в редактор, а затем написал свою собственную функцию, используя его. Итак, вот мой файл JS:
const regex = /[a-zA-Z]/g;
const _string = "++a+b+c++";
//The following is the loop from the StackOverflow user
var m;
do {
m = regex.exec(_string);
if (m) {
// Logging the results
console.log(m, "hello");
}
} while (m);
console.log("Separating top and bottom so it's easier to read");
// Now here is the function I wrote using that code
const match = str => {
let _matches;
do {
_matches = regex.exec(_string);
if (_matches) {
// Logging the results
console.log(_matches);
}
} while (_matches);
}
match(_string);
Вот моя проблема: когда я запускаю этот код (это Repl.it), результаты первой функции (так что в этом случае цикл от пользователя stackoverflow) не включают первое совпадение, возвращаемое из RegExp.prototype.exec ()
метод. Вот мой вывод консоли:
node v10.15.2 linux/amd64
[ 'b', index: 4, input: '++a+b+c++', groups: undefined ] 'hello'
[ 'c', index: 6, input: '++a+b+c++', groups: undefined ] 'hello'
Separating top and bottom so it's easier to read
[ 'a', index: 2, input: '++a+b+c++', groups: undefined ]
[ 'b', index: 4, input: '++a+b+c++', groups: undefined ]
[ 'c', index: 6, input: '++a+b+c++', groups: undefined ]
И если я переключу порядок цикла и функции, функция не вернет первое совпадение, а цикл вернет все три.
Любая помощь будет высоко ценится!