取双引号以外的内容为什么要去掉>
var str='<input type="text" value=">" name="username"/>'; var pattern=/<([^"'>]|"[^"]*"|'[^']*')*>/g; console.log(str.match(pattern));
10
收起
正在回答 回答被采纳积分+1
4回答
好帮手慕言
2019-09-05 18:48:29
同学你好,
1、因为>也是双引号之外的内容呀。
2、老师表达的意思是后面是有匹配>括号的。
3、?:代表非捕获分组。[^"'>]是除了尖括号,单引号、双引号都可以。
["']是匹配双引号或者单引号。
[^"']中的^是取反,即匹配非双引号或者单引号的内容,这样就可以匹配单引号或者双引号里面的内容。
*的意思是匹配前面的子表达式零次或多次, 等价于{0,}。
\1是引用第一个分组,即前面用小括号包裹的内容。所以后面又匹配一个双引号或者单引号。
(["'])[^"']*\1就是匹配了一对双引号或者单引号以及它里面的内容。
这块确实比较绕,建议同学多听几遍,多动手练习。
如果帮助到了你,欢迎采纳~祝学习愉快~
慕言_7946275
2019-09-05 18:32:20
老师,,可以把反向思考这个一起仔细解释下吗,,我看着看着就懵了,有种不认识正则的感觉了
var str='<input type="text" value=">" name="username"/>'; var pattern=/<(?:[^"'>]|(["'])[^"']*\1)*>/g; console.log(str.match(pattern));
慕言_7946275
2019-09-05 18:00:35
补充下,,看到有老师回复别的同学的
你好,正则中是有匹配最后面尖括号的哦:
所以第一个表达式中就不需要进行匹配了。
按照老师的意思那不是应该也不需要匹配开始的左尖括号了吗 <
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星