簡體   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