Регулярное выражение Javascript - сопоставление нескольких вхождений - PullRequest
1 голос
/ 01 февраля 2012

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

Пример:

      s = new RegExp(';' + y[p][0] + '_' + y[p][1] + '_' + y[p][2] + '_([0-9]*);', 'g');
        e = null;
        e = s.exec(grArr);
        while (e != null) {
            alert(e[0]+'-'+e[1]+'-'+e[2]); //debugging output
            r = r + e[0]; //adding results to output var
            e = s.exec(grArr);
        }

Sample variables:
//to be searched:
var grArr=';0_0_709711498101583267971121121179999105110111_11994876;0_0_709711498101583267971121121179999105110111_11994877;0_0_709711498101583267971121121179999105110111_11994878;0_0_709711498101583267971121121179999105110111_11994879;0_0_709711498101583268117110107101108103114252110_11994872;0_0_709711498101583268117110107101108103114252110_11994873;0_0_709711498101583268117110107101108103114252110_11994874;0_0_709711498101583268117110107101108103114252110_11994875;0_0_7097114981015832839910411997114122_11994868;0_0_7097114981015832839910411997114122_11994869;0_0_7097114981015832839910411997114122_11994870;0_0_7097114981015832839910411997114122_11994871;0_1_71114246115115101583276_11994870;0_1_71114246115115101583276_11994874;0_1_71114246115115101583276_11994878;0_1_71114246115115101583277_11994869;0_1_71114246115115101583277_11994873;0_1_71114246115115101583277_11994877;0_1_71114246115115101583283_11994868;0_1_71114246115115101583283_11994872;0_1_71114246115115101583283_11994876;0_1_7111424611511510158328876_11994871;0_1_7111424611511510158328876_11994875;0_1_7111424611511510158328876_11994879;'
//search Pattern:
y[0][0]='0';
y[0][1]='1';
y[0][2]='71114246115115101583283';

Это приводит к 2 вхождениям, а не к 3как и должно быть.

1 Ответ

1 голос
/ 01 февраля 2012

Проблема в том, что вы используете точку с запятой дважды: один раз в начале регулярного выражения, один раз в конце.

Поскольку в вашем примере три "совпадения" непосредственно следуют друг за другом, второе вхождение не найдено, поскольку его предыдущая точка с запятой уже использовалась в предыдущем сопоставлении.

Решение: используйте границы слов ('\\b') вместо ';' в своем регулярном выражении.

...