Подтвердить что ты не робот

Как закодировать все элементы, соответствующие регулярному выражению?

Вот так: Я хочу найти элементы, которые соответствуют регулярному выражению...

targetText = "SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext"

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

reg = new RegExp(/e(.*?)e/g);   
var result = reg.exec(targetText);

и я получаю только первый, но не следующий. Я могу получить только T1, но не T2, T3......

4b9b3361

Ответ 1

var reg = /e(.*?)e/g;
var result;
while((result = reg.exec(targetText)) !== null) {
    doSomethingWith(result);
}

Ответ 2

Попробуйте использовать match() в строке вместо exec(), хотя вы также можете выполнить цикл с exec. Матч должен дать вам все матчи за один раз. Я думаю, что вы также можете опустить глобальный спецификатор.

reg = new RegExp(/e(.*?)e/);   
var matches = targetText.match(reg);

Ответ 3

Три подхода в зависимости от того, что вы хотите с ним сделать:

  • Цикл каждого матча: .match

    targetText.match(/e(.*?)e/g).forEach((element) => {
       // Do something with each element
    });
    
  • Цикл и замена каждого матча на лету: .replace

    const newTargetText = targetText.replace(/e(.*?)e/g, (match, $1) => {
      // Return the replacement leveraging the parameters.
    });
    
  • Цикл и сделать что-то на лету: .exec

    const regex = /e(.*?)e/g;  // Must be declared outside the while expression, 
                               // and must include the global "g" flag.
    
    let result;
    while(result = regex.exec(targetText)) {
      // Do something with result[0].
    } 
    

Ответ 4

targetText = "SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext"    
reg = new RegExp(/e(.*?)e/g);   
var result;
while (result = reg.exec(targetText))
{
    ...
}

Ответ 5

Я продолжал получать бесконечные циклы, следуя совету выше, например:

var reg = /e(.*?)e/g;
var result;
while((result = reg.exec(targetText)) !== null) {
    doSomethingWith(result);
}

Объект, который был назначен для result каждый раз, был:

["", "", index: 50, input: "target text", groups: undefined]

Так что в моем случае я отредактировал приведенный выше код для:

const reg = /e(.*?)e/g;
let result = reg.exec(targetText);
while(result[0] !== "") {
    doSomethingWith(result);
    result = reg.exec(targetText);
}

Ответ 6

Вы также можете использовать метод String.replace для циклического прохождения всех элементов.

result = [];
 // Just get all numbers
"SomeT1extSomeT2extSomeT3ext".replace(/(\d+?)/g, function(wholeMatch, num) {
  // act here or after the loop...
  console.log(result.push(num));
  return wholeMatch;
});
console.log(result); // ['1', '2', '3']

Привет