要从所见即所得编辑器中过滤用户输入,我试图找到以下字符串:
<p> </p>
<p> </p>
<p></p>
这是我目前使用的正则表达式:
/'<p'>([nbsp';]*|['s]*|[ ]*)'<'/p'>/i
我对RegEx很陌生,但据我所知,这:
-
'<p'>
: -完全匹配<p>
,则 -
(
-匹配:-
[nbsp';]*
-"nbsp;
"精确,任意次数 -
|['s]*
-或任何空格字符,任意次数 -
|[ ]*
-或" "(空格),任意次数
-
-
<'/p'>
-完全匹配</p>
但是,这个表达式只匹配 <p>nbsp;</p>
,而不匹配其他两个。
我也试过了:
/'<p'>[nbsp';|'s| ]*'<'/p'>/i
我正在测试它使用RegEx101.com(第一个表达式,第二个表达式)
我怎样才能使它工作?
你不能在字符类中使用"whole words",下面这些就足够了…
~<p>(?: |'s)*</p>~i
注意:您不需要包括<space>
, 's
令牌将匹配空白,您不需要转义<
和>
,它们不被认为是特殊字符。
必须对多个匹配使用g
修饰符。
/'<p'>([nbsp';|'s| ]*['s]*|)'<'/p'>/gi
https://regex101.com/r/zR9jY4/2 你忘了amp;和
/'<p'>[ ';|'s| ]*'<'/p'>/i
在示例<p> </p>
<p> </p>
<p></p>
<p> asdfas</p>
这将匹配前3
你不必用方括号。
/'<p'>( *|'s*)'<'/p'>/i