繁体   English   中英

用Java替换正则表达式?

[英]Regular Expression Replace in Javascript?

我正在尝试使用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);

值得注意的是,由于HTML不是常规语言 ,因此除非具有非常狭窄的已定义范围,否则您无法可靠地对带有正则表达式的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);

现场示例 | 资源

参考

您可以使用捕获组来获取内容。 顺便说一句,为什么使用RegExp函数而不是文字? 您只需要输入更少的\\ s ...

h = h.replace(/<div>\s*([^<]*?)\s*<\/div>/g, "<div>$1</div>");

[^<]*? 会懒惰地匹配非<任何内容(包括空格)。 由于它是惰性的,因此不会立即包含结束标记之前的所有空格。

工作演示

(不过请注意嵌套的html ...如果您的标签可以嵌套,则最好不要使用正则表达式)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM