一个问题
来源:4-4 匹配HTML标签
CoffeePlayer
2021-01-27 14:35:23
// var str = '<p class="odd" id="odd">123</p>';
// var pattern = /<\/?[a-zA-z]+(\s+[a-zA-Z]+=".*")*>/g;
// console.log(str.match(pattern));
var str = '<input type="text" value=">" name="username" />';
//var pattern = /<[^>]+>/g;
// var pattern = /<(?:[^"'>]|"[^"]*"|'[^']*')*>/g
var pattern = /<\/?[a-zA-Z]+(?:\s+[a-zA-Z]+=".*")*>/g
// var pattern = /<(?:[^"'>]|(["'])[^"']*\1)*>/g
console.log(str.match(pattern));
3回答
好帮手慕久久
2021-01-28
同学你好,解答如下:
*是匹配0次或多次,当匹配0次时,就比较特殊,可以理解成如果字符串是0个(?:\s+[a-zA-Z]+=".*")也行,即字符串不是(?:\s+[a-zA-Z]+=".*")也行。由于‘ value="’不是(?:\s+[a-zA-Z]+=".*"),所以就能匹配上,只是结果为空字符串。不加*,含义就是必须满足(?:\s+[a-zA-Z]+=".*"),而‘ value="’不满足(?:\s+[a-zA-Z]+=".*"),所以匹配不上。
当*表示0次时,它是一个特殊的存在,不用深究,简单了解就行。
祝学习愉快!
好帮手慕久久
2021-01-27
同学你好,解答如下:
由于我们的正则形式是“<内容>”,所以不会包含value值的右侧双引号:
该正则的匹配过程可以如下这样理解:
正则表达式从左往右匹配,先找到第一个可能满足整体正则的位置,即定位到value中的尖括号:
然后再判断该段字符串是否满足正则的所有内容:
由于“(?:\s+[a-zA-Z]+=".*")*”这个正则比较特殊,它使用了量词*,即匹配0次或多次。它能匹配上‘ type="text"’:
也能匹配上‘ value="’,只是匹配到的结果为空字符串,如下:
所以最终的匹配结果是<input type="text" value=">。
*这个量词比较特殊,所以上面的过程,同学了解一下即可。可以根据打印结果,看它是否能匹配上,如果打印为null,则是匹配不上:
祝学习愉快!
好帮手慕久久
2021-01-27
同学你好,解答如下:
匹配的是value中的尖括号:
需要注意的是,打印的结果中,最后那个引号不是value尖括号右侧的引号:
而是如下:
祝学习愉快!
相似问题