Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配元素ID或元素名称/值的正则表达式搜索_Javascript_Browser_Dom - Fatal编程技术网

Javascript 匹配元素ID或元素名称/值的正则表达式搜索

Javascript 匹配元素ID或元素名称/值的正则表达式搜索,javascript,browser,dom,Javascript,Browser,Dom,我想创建一个脚本(JavaScript)来枚举所有“radio”元素,搜索那些具有匹配某些正则表达式的“ID”(或者可能是“Name”和“Value”)的元素。如果存在匹配项,我将根据匹配的正则表达式执行其他代码。按“ID”搜索应该比按“Name”和“Value”搜索容易,但在某些情况下,元素没有“ID”,因此在这些情况下,我会按“Name”和“Value”搜索正则表达式匹配项 以下是一些典型的“无线电”元件: <span> <input id="ABC123" onclick

我想创建一个脚本(JavaScript)来枚举所有“radio”元素,搜索那些具有匹配某些正则表达式的“ID”(或者可能是“Name”和“Value”)的元素。如果存在匹配项,我将根据匹配的正则表达式执行其他代码。按“ID”搜索应该比按“Name”和“Value”搜索容易,但在某些情况下,元素没有“ID”,因此在这些情况下,我会按“Name”和“Value”搜索正则表达式匹配项

以下是一些典型的“无线电”元件:

<span>
<input id="ABC123" onclick="somefunction('DEF');" name="GHI" value="JKL45" type="radio">
<input id="MNO678" onclick="somefunction('PQR');" name="GHI" value="STU90" type="radio">
</span>

<span>
<input name="GHI" value="JKL45" type="radio">
<input name="GHI" value="STU90" type="radio">
</span>
预定义正则表达式字符串可能是最容易的,如:

var IDregexlist=new Array("/test1/","/test2/","/test3/"); /* example: "/ABC[0-9]+/", "/MNO[0-9]+/" ... */  
var NVregexlist=new Array("/test4/","/test5/","/test6/"); /* example: "/GHI:JKL[0-9]+/", "/GHI:STU[0-9]+/" ... */  
然后在dorado函数中,测试数组中每个项的正则表达式匹配,如下所示:

for each (rexpr in IDregexlist) {... };
我不应该对大部分JavaScript代码有问题,除非我需要知道,在函数dorado(rado){…}中:

  • 如何获取元素的“ID”、“name”和“value”(这是否只是“rado.ID”、“rado.name”和“rado.value”?)
  • 如何进行正则表达式匹配测试以及如何判断表达式是否匹配
  • //收音机匹配3个正则表达式中的任意一个
    var regexes={valueRegex:/test/,idRegex:/\d/,nameRegex:/\w/};
    var inputs=document.getElementsByTagName('input');
    var radios=Array.prototype.filter.call(输入,函数(输入){
    返回input.type==='radio';
    });
    收音机。forEach(功能(收音机){
    多拉多(无线电);
    });
    多拉多功能(收音机){
    var keys=Object.keys(正则表达式);
    for(变量i=0,len=keys.length;i

    你能举一个你试图匹配的正则表达式的例子吗?@thgaskell-它类似于一个固定字符串,后跟一个下划线和一些数字,因此正则表达式搜索表达式类似于
    /ABC\u0-9]+/
    。感谢您花时间提供您的答案。这比我的新手大脑所能理解的要高级一点。行中:
    “radios.forEach(function(radio){
    “function(radio)”来自哪里。
    另外,在
    “function doRado(radio){
    ,我假设
    “radio.id”“
    返回radio元素的ID属性。整个语句
    radios.forEach…
    类似于使用for循环。在每次迭代
    forEach
    中,将
    radio
    参数指定给当前数组元素
    (radios[0]、radios[1]、…、radios[i])
    .Yes,radio.id,radio.name对应于单选按钮的属性。
    radios
    数组包含所有
    元素,因此
    函数doRado()中的
    radio
    指的是这些元素之一。事实上,整个迭代部分与您的类似,您可以在
    行中用
    dorado
    替换
    dorado
    “radios.forEach(function(radio){…”
    ,您使用的
    “function('object')”
    只是一个“模板”吗要定义{}内函数中使用的(forEach)变量的名称,可以
    “radios.forEach(function(radio){…”
    重写为:
    “for each(radio in radios){doRado(radio);}”
    ?(我还编辑了我的问题以提供更多细节)。
    var IDregexlist=new Array("/test1/","/test2/","/test3/"); /* example: "/ABC[0-9]+/", "/MNO[0-9]+/" ... */  
    var NVregexlist=new Array("/test4/","/test5/","/test6/"); /* example: "/GHI:JKL[0-9]+/", "/GHI:STU[0-9]+/" ... */  
    
    for each (rexpr in IDregexlist) {... };
    
    //radio matches any 1 of 3 regexes
    var regexes = {valueRegex: /test/, idRegex: /\d/, nameRegex: /\w/};
    
    var inputs = document.getElementsByTagName('input');
    var radios = Array.prototype.filter.call(inputs, function(input) {
        return input.type === 'radio';
    });
    
    radios.forEach(function(radio) {
        doRado(radio);
    });
    
    function doRado(radio) {
        var keys = Object.keys(regexes);
        for(var i = 0, len = keys.length; i < len; i ++) {
            //which: if there's no ID, test name and value
            var which = radio.id || radio.name || radio.value;
            var match = which.match(regexes[keys[i]]);
            if(match) {
                //do something depending on which regex matched
                console.log(which + ' matched regex ' + keys[i]);
                break;
            }
        }
    }