RegEx для извлечения значения атрибута - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь извлечь значение id из приведенного ниже кода.

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

id "selectNOIOrg_do_frm_organization = "(. +?)" />

<input type="radio" name="frm.organization" id="selectNOIOrg_do_frm_organization{C5DF28FD-26EF-90DA-1214-BD72E0214F17}" value="{C5DF28FD-26EF-90DA-1214-BD72E0214F17}" title="College of St. Jude" ext-ns-multiple="frmorganization">

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

Ответы [ 3 ]

1 голос
/ 23 мая 2019

Вы можете использовать id="\w+{([A-Z0-9-]+)}", если строка перед id может измениться.

Если строка перед id равна , всегда одна и та же или существует несколько подобных строк-идентификаторов, и вам нужно только эта конкретная , используйте `

let html = '<input type="radio" name="frm.organization" id="selectNOIOrg_do_frm_organization{C5DF28FD-26EF-90DA-1214-BD72E0214F17}" value="{C5DF28FD-26EF-90DA-1214-BD72E0214F17}" title="College of St. Jude" ext-ns-multiple="frmorganization">';
let rgx = /id="(selectNOIOrg_do_frm_organization{([A-Z0-9-]+)})"/;

var result = rgx.exec(html);
if (result) {
    alert('regex matched:\n\nfull-id=' + result[1] + '\n\nvalue=' + result[2]);
} else {
    alert('regex does not match');
}

`

Чтобы соответствовать только GUID в качестве идентификаторов, вы можете использовать id="selectNOIOrg_do_frm_organization{([A-Z0-9-]{8}-[A-Z0-9-]{4}-[A-Z0-9-]{4}-[A-Z0-9-]{4}-[A-Z0-9-]{12})}"

1 голос
/ 23 мая 2019

В шаблоне, который вы пробовали id" selectNOIOrg_do_frm_organization="(.+?)" />, вы можете внести следующие изменения:

id" должно быть id=", organization=" должно быть organization{, и вы можете удалить />

Вы можете оставить (.+?), но вы также можете использовать отрицательный класс символов для предотвращения ненужного возврата.

Вы можете использовать совпадение {, затем использовать группу захвата и сопоставить то, что внутри, используя класс отрицательных символов ([^{}\n]+), а затем снова сопоставить }:

id="selectNOIOrg_do_frm_organization{([^{}\n]+)}"

Regex demo

0 голосов
/ 23 мая 2019

Здесь мы можем просто взять id=" в качестве левой границы и " в качестве правой границы, а затем собрать значение нашего атрибута в первой группе захвата $1:

id="(.+?)"

enter image description here

DEMO

Демо

Этот фрагмент показывает, как работают группы захвата:

const regex = /id="(.+?)"/gm;
const str = `<input type="radio" name="frm.organization" id="selectNOIOrg_do_frm_organization{C5DF28FD-26EF-90DA-1214-BD72E0214F17}" value="{C5DF28FD-26EF-90DA-1214-BD72E0214F17}" title="College of St. Jude" ext-ns-multiple="frmorganization">
`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...