mac 地址上的 Javascript 正则表达式
Javascript regular expression on mac address
>假设我有一个mac地址列表,例如:"00:11:22:33:44:55,11:22:33:44:55:66,22:33:44:55:66:77"
我想对该列表进行正则表达式检查。
var re = /(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+/g
但是,它不起作用。以下是输入测试。
var t1 = "11:22:33:44:55:66";
var t2 = t1 + ",12:22:33:44:55:66";
var t3 = t1 + ",11asdfasdf:22:33:44:55:66";
var t4 = t1 + ",haha";
var t5 = t1 + ",";
var t6 = "123123123123";
var t7 = t1 + ",33:44:55:66:77:88:";
var t8 = t1 + ",33:44:55:66:77:88asdfasdfasdfasdfasdfasd";
var t9 = t1 + ",dfasdfasdfasdfasdfasd";
var t10 = t2 + ",12:33:44:55:66:77";
var t11 = t2 + ",wahaa";
console.log("t1: [" + t1 + "] " + re.test(t1));
console.log("t2: [" + t2 + "] " + re.test(t2));
console.log("t3: [" + t3 + "] " + re.test(t3));
console.log("t4: [" + t4 + "] " + re.test(t4));
console.log("t5: [" + t5 + "] " + re.test(t5));
console.log("t6: [" + t6 + "] " + re.test(t6));
console.log("t7: [" + t7 + "] " + re.test(t7));
console.log("t8: [" + t8 + "] " + re.test(t8));
console.log("t9: [" + t9 + "] " + re.test(t9));
console.log("t10: [" + t10 + "] " + re.test(t10));
console.log("t11: [" + t11 + "] " + re.test(t11));
结果
t1: [11:22:33:44:55:66] true
t2: [11:22:33:44:55:66,12:22:33:44:55:66] true
t3: [11:22:33:44:55:66,11asdfasdf:22:33:44:55:66] false
t4: [11:22:33:44:55:66,haha] true
t5: [11:22:33:44:55:66,] false
t6: [123123123123] false
t7: [11:22:33:44:55:66,33:44:55:66:77:88:] true
t8: [11:22:33:44:55:66,33:44:55:66:77:88asdfasdfasdfasdfasdfasd] false
t9: [11:22:33:44:55:66,dfasdfasdfasdfasdfasd] true
t10: [11:22:33:44:55:66,12:22:33:44:55:66,12:33:44:55:66:77] true
t11: [11:22:33:44:55:66,12:22:33:44:55:66,wahaa] false
任何人都可以告诉我为什么 t7、t9 和 t4 会返回 true?此外,当我在 chrome 控制台上键入 re.test(t11)
时,我发现结果将在真和假之间切换。有人知道为什么吗?
由于您的正则表达式已经设计为匹配字符串中的所有 mac 地址(而不是一次只匹配一个),因此您可以通过删除 g
标志来修复此错误。此外,为了防止仅匹配字符串的一部分,您需要在正则表达式的开头和结尾包含^
和$
字符。
var re = /^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+$/
由于您使用的是全局正则表达式(由于末尾的g
),因此正则表达式会保留有关其最后一个匹配项的状态,这将影响将来的匹配项。
具体而言,存储在 re
变量中的 RegExp 对象具有一个lastIndex
,该在每次匹配后更新为指向第一个字符。将来的匹配将从该索引开始执行,即使您与新字符串匹配也是如此。匹配不成功后,lastIndex
将重置为 0
。
从图形上看,这是每场比赛后的比赛内容以及re.lastIndex
得分:
T1: 11:22:33:44:55:66 ^ T2:11:22:33:44:55:66,12:22:33:44:55:66 ^ T3: 11:22:33:44:55:66,11asdfasdf:22:33:44:55:66 没有匹配! ^ 由于没有匹配项,lastIndex 被重置为 0。 T4:11:22:33:44:55:66,哈哈 ^ T5:11:22:33:44:55:66,不匹配! ^ T6: 123123123123 没有匹配! ^ T7: 11:22:33:44:55:66,33:44:55:66:77:88: ^ T8: 11:22:33:44:55:66,33:44:55:66:77:88asdfasdfasdfasdfasdfasdfasd 没有匹配! ^ T9: 11:22:33:44:55:66,dfasdfasdfasdfasdfasdfasd ^ T10:11:22:33:44:55:66,12:22:33:44:55:66,12:33:44:55:66:77 ^ T11:11:22:33:44:55:66,12:22:33:44:55:66,哇哈 没有匹配! ^
您需要
使用行锚点的^
开头和行锚点的$
结束。测试仅验证字符串是否包含正确的匹配项,而不验证整个字符串是否正确。
var str = 'This is a sentence';
var re = /e/;
re.test(str); // returns true
var re2 = /^e$/;
re2.test(str); // returns false
re2.test("e"); // returns true
为了让您获得最准确的答案,我建议:
- 拆分 ","
str.split(",")
以获取候选 MAC 地址数组 - 将数组的每个元素与以下修改后的正则表达式匹配:
var re = /^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/i
我使用i
标志使正则表达式不区分大小写,并且还添加了一个-
,因为有时 MAC 地址是这样写的:3D-F2-C9-A6-B3-4F
相关文章:
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 将javascript正则化为vb
- 将po-box javascript正则表达式转换为c#regex
- 被javascript正则表达式分组卡住了
- 从字符串中提取年份的Javascript正则表达式
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- JavaScript正则表达式匹配量
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- javascript正则表达式来识别所有特殊字符
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 查找所有注释的JavaScript正则表达式
- javascript正则表达式验证未按预期工作
- javascript正则表达式,用于匹配带数字和不带数字的字符串
- 模仿负查找以匹配JavaScript正则表达式中没有紧跟特定字符的模式
- JavaScript正则表达式(带_-的字母数字字符)
- 用特定的javascript正则表达式替换每个单词
- 搜索日历事件的Javascript正则表达式
- 如何获取 JavaScript 正则表达式子匹配的位置
- 正则表达式子字符串以JavaScript开始和结束