如何过滤  在textarea与正则表达式?

bra*_*r19 6 javascript regex

顺便说一句:我知道使用正则表达式并不是世界上最好的主意......

例如,我有这样的输入变体:

<p>&nbsp; &nbsp; &nbsp;</p>
Run Code Online (Sandbox Code Playgroud)

要么

<p>&nbsp; &nbsp;</p>
Run Code Online (Sandbox Code Playgroud)

要么

<p>&nbsp;</p>
Run Code Online (Sandbox Code Playgroud)

我想检查我的输入,如:所有除<p>用&nbsp;在他们(0,1或50)的每一个量...

我写了这样的表达:

/[^<p>(\s*&nbsp;\s*)*<\/p>]/ig
Run Code Online (Sandbox Code Playgroud)

似乎它有效,但是!

例如,我有这样的输入:

<p>&nbsp; &nbsp;t&nbsp;</p>
Run Code Online (Sandbox Code Playgroud)

要么

<p>&nbsp; &nbsp;tttt&nbsp;tttt</p>
Run Code Online (Sandbox Code Playgroud)

它正在思考,它等于我的正则表达式......

不是个好主意......

我的正则表达式做错了什么?或者有更好的方法来解决这个问题?

Rob*_*obG 1

你的表达很接近,你想要:

.replace(/<p>(\s*&nbsp;\s*)+<\/p>/ig,'<p>&nbsp;</p>');
Run Code Online (Sandbox Code Playgroud)

这将匹配<p>后跟一个或多个出现的\s*&nbsp;\s*后跟</p>并将其替换为<p>&nbsp;</p>。

或者您只想&nbsp;保留单个,而将多个完全删除?在这种情况下,您需要:

.replace(/<p>\s*&nbsp;\s*(\s*&nbsp;\s*)+<\/p>/ig,'')
Run Code Online (Sandbox Code Playgroud)

请注意,不应使用正则表达式来处理 HTML。;-)

编辑

如果您只需要测试它,则使用:

/<p>(\s*&nbsp;\s*)+<\/p>/.test(string);
Run Code Online (Sandbox Code Playgroud)

对于一个或多个并且:

/<p>\s*&nbsp;\s*(\s*&nbsp;\s*)+<\/p>/.test(string);
Run Code Online (Sandbox Code Playgroud)

两个或更多。