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