Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除不需要的空白的最安全方法_Javascript_Regex_Whitespace - Fatal编程技术网

Javascript 删除不需要的空白的最安全方法

Javascript 删除不需要的空白的最安全方法,javascript,regex,whitespace,Javascript,Regex,Whitespace,我有一个HTML字符串,它通常有很多空白 例如: <p>All these words <br /> <strong>All</strong> <em>these</em> words <pre> All these words</pre> </p> 这似乎可以替换不需要的空白,但我想保留PRE元素中的空白 这在正则表达式中是否可行?使用: String.re

我有一个HTML字符串,它通常有很多空白

例如:

<p>All     these words <br />
<strong>All</strong>   <em>these</em>   words
<pre>    All    these words</pre>
</p>
这似乎可以替换不需要的空白,但我想保留PRE元素中的空白

这在正则表达式中是否可行?

使用:

String.replace(/([\s\s]*?)|{2,}/ig,$1')
在Firefox3中测试

编辑:


请参见此处的测试页面:

正则表达式无法执行此操作,它就这么简单

对于这类事情,正则表达式是一个糟糕的选择<代码>块可以包含其他标记等。另外,使用
空白:pre
属性的CSS(内联或带类)又如何呢


HTML和浏览器可以很好地处理空白。这真的是你需要解决的问题吗?如果需要,您需要某种HTML解析器。

谢谢!似乎是可行的,期望单词之间的预期空格是闭合的。使用“$1”似乎可以解决这个问题。如果PRE元素有任何属性,我们可以使用它。它首先尝试匹配PRE,然后匹配空格。pre位于捕获组(括号)内。当pre部分被捕获时,$1确保它被自己替换。当找到两个连续的空格时,$1将不插入任何内容,因为在这种情况下捕获组将为空。以下操作也将删除新行和制表符:
String.replace(/([\s\s]*?)|[\t]{2,}|\n/g,$1')
这会对有效的HTML5文档造成损害吗?虽然你提出了一个很好的观点,但问题并不是关于带空格的元素:pre。它也没有要求pre中的元素与preYes中的元素区别对待。与外部相比,pre内部的空格不应删除。@svante:你不同意谁的意见?
String.replace(/ {2,}/g, '');
String.replace(/(<pre[\s\S]*?>[\s\S]*?<\/pre>)| {2,}/ig, '$1')