Замена строки запроса возвращает только первое значение массива с помощью регулярного выражения?

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Мой URL-адрес имеет значение параметра, как показано ниже:

 Nr=AND(OR(abc:def),OR(ghi:jkl),OR(mno:pqr)...)
 

Использовал приведенное ниже выражение регулярного выражения для успешного извлечения приведенной выше строки запроса, но оно возвращает только первое значение массива, например. получая только значения abc и def в массиве.

 OR(([^:]*):([^)]*))
 

Я хотел извлечь все значения в виде двух отдельных значений массива, таких как abc, ghi, mno и def, jkl, pqr…

Пожалуйста, найдите мой код ниже:

 var getNrValue = 'AND(OR(Analyzed:abc),OR(Compounds:def),OR(Chemical:mno))';
var regex = /OR(([^:]*):([^)]*))/gm;
var s = regex.exec(getNrValue);
console.log(s);
 

любая помощь в этом?

Комментарии:

1. Покажите нам полный код

Ответ №1:

Вы можете использовать это регулярное выражение:

 ([^():] ):([^():] )
 

В демонстрации регулярных выражений на правой панели показаны группы захвата. Существует также живая демонстрация JS.

Используйте этот код для создания массивов (см. Вывод живой демонстрации JS):

 var array1 = []; 
var array2 = []; 
var string = 'Nr=AND(OR(abc:def),OR(ghi:jkl),OR(mno:pqr)...)'
    var string = 'Nr=AND(OR(abc:def),OR(ghi:jkl),OR(mno:pqr)...)'
    var myregex = /([^():] ):([^():] )/g;
    var thematch = myregex.exec(string);
    while (thematch != null) {
        // add it to array of captures
        array1.push(thematch[1]);
        array2.push(thematch[2]);
        document.write("left side: ",thematch[1],"<br />"); 
        document.write("right side: ",thematch[2],"<br />"); 
        // match the next one
        thematch = myregex.exec(string);
    }
 

Объяснение:

  • ([^():] ) записывает в группу 1 любые символы, которые не являются круглыми скобками () или двоеточиями :
  • :
  • ([^():] ) записывает в группу 2 любые символы, которые не являются круглыми скобками () или двоеточиями :
  • код извлекает совпадения групп 1 и 2 и помещает их в два массива

Дайте мне знать, если у вас возникнут вопросы. 🙂

Комментарии:

1. просто дайте мне знать, имеет ли мой параметр запроса следующие изменения, такие как Nr=И (ИЛИ (abc: def, abc: aaa, abc: ddd), ИЛИ (ghi: jkl, ghi: ggg, ghi: ghg), ИЛИ (mno: pqr, mno: ppp, mno: qqq)…). Здесь добавляются дополнительные значения..