Как исправить шаблон RegEX, чтобы найти все совпадения? - PullRequest
2 голосов
/ 11 апреля 2019

Я написал шаблон RegEx

const PATTERN = /get id\(\) {\s*return '([^']*)'/;

но он находит до первого совпадения. Я добавил флаг g .

А теперь вместо получения только идентификаторов: 53d69076,99969076,22269076 из текста

static get id() {
    return '53d69076'
}


static get id() {
    return '99969076'
}

static get id() {
    return '22269076'
}

У меня есть

 'get id() {\n        return \'53d69076\'',
 'get id() {\n        return \'99969076\''
 'get id() {\n        return \'22269076\''

Не могли бы вы помочь мне исправить мой шаблон (чтобы получить только идентификаторы, а не полный str)?

результат введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

JavaScript RegExp all match

Если вы хотите получить все совпадения в RegExp:

  • , вы должны вызвать функцию exec в цикле while ((match = myRe.exec(str))

  • Не следует указывать регулярное выражение в цикле while оно должно быть в переменной.Это неправильно: while ((match = /([0-9]+?)/gm.exec(str)) != null)

  • Вам необходимо указать флаг g и, возможно, m.Пример: /([0-9]+?)/gm

Пример использования функции exec в JavaScript и получения всех совпадений из RegExp

var str = "static get id() {\n return '99969076'\n} \n static get id() {\n return '888888'\n} \n static get id() {\n return '777777'\n}";

function getArray(str){
    let match, 
        arr = [],
        myRe = /static get id\(\) {\s*?return '([0-9]+?)'\s*?}/g;

    while ((match = myRe.exec(str)) != null) {
         arr.push(match[1]);
    } 
    return arr.length > 0 ? arr : false;
}

console.log(getArray(str));
console.log(getArray(null));

Пример использования функции replace в JavaScript и получения всех совпадений из RegExp

var str = "static get id() {\n return '99969076'\n} \n static get id() {\n return '888888'\n} \n static get id() {\n return '777777'\n}";

function getData(str){
    let arr = [];
    
    if (str == null) { 
        return false; 
    }

    str.replace(/static get id\(\) {\s*?return '([0-9]+?)'\s*?}/g, 
    function(match, p1, offset, str_full){
        return arr.push(p1);
    });
    return arr.length > 0 ? arr : false;
}

console.log(getData(str));
console.log(getData(null));
console.log(getData('fthfthfh'));

Другие примеры использования функции replace в JavaScript

const h = "static get id() {return '99969076'}";
            
console.log(h.replace(/static get id\(\) {return ('[0-9]+?')}/g, '$1'));

const h = "static get id() {\n return '99969076'\n}";
            
console.log(h.replace(/static get id\(\) {\s*?return '([0-9]+?)'\s*?}/g, '$1'));
0 голосов
/ 11 апреля 2019

IUUC:

/return\s+\'(?<yourCapturedGroup>\w+)\'/

Вы можете использовать группу под названием yourCapturedGroup для получения идентификаторов, используя / g

EDIT : вот ссылка на regex101:

https://regex101.com/r/0YQIOh/1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...