一个问题

来源: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));

http://img.mukewang.com/climg/6011097a09eef5da14420698.jpg



写回答

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次时,它是一个特殊的存在,不用深究,简单了解就行。

祝学习愉快!


0

好帮手慕久久

2021-01-27

同学你好,解答如下:

由于我们的正则形式是“<内容>”,所以不会包含value值的右侧双引号:

http://img.mukewang.com/climg/60113de40985324a10790162.jpg

http://img.mukewang.com/climg/60113edf09772a7309530162.jpg

该正则的匹配过程可以如下这样理解:

正则表达式从左往右匹配,先找到第一个可能满足整体正则的位置,即定位到value中的尖括号:

http://img.mukewang.com/climg/601141cc09381aff07970127.jpg

然后再判断该段字符串是否满足正则的所有内容:

由于“(?:\s+[a-zA-Z]+=".*")*”这个正则比较特殊,它使用了量词*,即匹配0次或多次。它能匹配上‘  type="text"’

http://img.mukewang.com/climg/601142f909effeaf07490204.jpg

http://img.mukewang.com/climg/6011426e09997c2506960093.jpg

也能匹配上‘ value="’,只是匹配到的结果为空字符串,如下:

http://img.mukewang.com/climg/6011430609fe3c9007390181.jpg

http://img.mukewang.com/climg/601142c8099f521d05590088.jpg

所以最终的匹配结果是<input type="text" value=">。

*这个量词比较特殊,所以上面的过程,同学了解一下即可。可以根据打印结果,看它是否能匹配上,如果打印为null,则是匹配不上:

http://img.mukewang.com/climg/6011437d0929590b04400062.jpg

祝学习愉快!

0
hoffeePlayer
hp>老师不好意思,我还是没懂,为啥加上星号(*),结果就不是null,但是确实看着是匹配不上。

http://img.mukewang.com/climg/601181be09ef39ef15120288.jpg

http://img.mukewang.com/climg/601181f809b2173312620250.jpg


不加星号(*),为啥会返回null

http://img.mukewang.com/climg/6011822b09015f4918900334.jpg


http://img.mukewang.com/climg/6011823d09cfa02209700088.jpg

h021-01-27
共1条回复

好帮手慕久久

2021-01-27

同学你好,解答如下:

匹配的是value中的尖括号:

http://img.mukewang.com/climg/60111530092872b207010090.jpg

需要注意的是,打印的结果中,最后那个引号不是value尖括号右侧的引号:

http://img.mukewang.com/climg/601115ce0928191c07600095.jpg

而是如下:

http://img.mukewang.com/climg/601115a3092edf2309570175.jpg

http://img.mukewang.com/climg/601115b409a63c3d05090124.jpg

祝学习愉快!

0
hoffeePlayer
hp>http://img.mukewang.com/climg/6011336c09229b8815160324.jpg

正则表达式写着两个引号(""),为什么结果这里只有一个引号

<input type="text" value=">

h021-01-27
共1条回复

0 学习 · 14456 问题

查看课程