用于提取属性值的正则表达式

RegEx for extracting an attribute value

我正在尝试从下面提供的代码中提取 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">

我希望正则表达式提取器能够识别 ID(它是一个动态 ID,会根据所选的单选按钮而变化)

这里,我们可能只想以id="为左边界,"为右边界,然后在第一个捕获组</code>中收集我们的属性值:</p> <pre><code>id="(.+?)"

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}`);
    });
}

正则表达式

如果不需要此表达式,可以在 regex101.com 中对其进行修改或更改。

正则表达式电路

jex.im 可视化正则表达式:

您可以使用 id="\w+{([A-Z0-9-]+)}",如果 id 之前的字符串可以 更改。

如果 id 之前的字符串 总是相同的 或者有多个 id-strings 这样的字符串而你只想要 这个具体一个使用`

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,您可以使用 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})}"

在您尝试的模式中 id" selectNOIOrg_do_frm_organization="(.+?)" /> 您可以进行以下更改:

id" 应该是 id="organization=" 应该是 organization{ 你可以去掉 />

您可以保留 (.+?),但您也可以使用否定字符 class 来防止不必要的回溯。

您可以使用匹配 {,然后使用捕获组并使用取反字符 class ([^{}\n]+) 匹配其中的内容,然后再次匹配 }

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

Regex demo