我正在尝试使用javascript rgular表达式修剪div中的前导和尾随空格,但它似乎不起作用。我的代码如下。您可以在Online Javascript Testing处尝试此代码。我的目标是删除 abc 123 之前和之后的所有空格,但是在封闭div之内。
var h = "<div> abc 123 </div>";
h = h.replace(new RegExp("\\<div\\>\\s*\\<\\/div\\>", "gi"), "");
alert(h);
答案 0 :(得分:6)
值得注意的是,由于HTML不是regular language,因此除非您具有非常狭窄的定义范围,否则无法可靠地对具有正则表达式的HTML片段进行操作。例如,在这里,如果文本真的如你所示,我们可以这样做,但如果有嵌套的div,则不能(可靠)(为此我们需要的不仅仅是正则表达式)。
解决这个问题:
我会使用文字而不是传递给RegExp
构造函数的字符串。它只是让事情变得简单一些。然后我会使用一个捕获组并用该组的内容替换整体匹配。并且您需要在要匹配的文本之后使用规则以消耗最后的空白。这意味着中间的规则需要非贪婪。所有这些都来自:
var h = "<div> dsd dsdsd </div>";
h = h.replace(/<div>\s*(.*?)\s*<\/div>/gi, "$1");
alert("'" + h + "'");
或者,如果您想保留div
代码:
var h = "<div> dsd dsdsd </div>";
h = h.replace(/(<div>)\s*(.*?)\s*(<\/div>)/gi, "$1$2$3");
alert(h);
答案 1 :(得分:2)
您可以使用捕获组来获取内容。顺便说一句,为什么要使用RegExp
函数而不是文字?你必须少输入\
s ...
h = h.replace(/<div>\s*([^<]*?)\s*<\/div>/g, "<div>$1</div>");
[^<]*?
会懒惰地匹配任何不是<
(包括空格)的内容。由于它是懒惰的,因此不会包括在结束标记之前的所有空格。
(小心嵌套的html虽然......如果你的标签可以嵌套,最好不要使用正则表达式)