RegEx用于提取属性值

时间:2019-05-23 14:09:36

标签: regex jmeter regex-lookarounds regex-group boost-regex

我正在尝试从下面提供的代码中提取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,并且会根据所选的单选按钮进行更改)

3 个答案:

答案 0 :(得分:0)

在这里,我们可能只想将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电路

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

enter image description here

答案 1 :(得分:0)

如果ID 前的字符串可以更改,则可以使用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,可以使用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})}"

答案 2 :(得分:0)

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

id"应该是id="organization="应该是organization{,并且您可以删除/>

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

您可以使用匹配项{,然后使用捕获组并使用否定的字符类([^{}\n]+)匹配内部内容,然后再次匹配}

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

Regex demo