[英]Regular expression replace only one matching
我在 JavaScript 中有一個正則表達式代碼
const regexns = /[A-Za-z]\:[A-Za-z]/gi;
data = data.replace(regexns, '__NS__');
如果我申請這個 XML
<AnchorPane prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.zigma.Controller">
我得到
<AnchorPane prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/8" xmln__NS__x="http://javafx.com/fxml/1"
f__NS__ontroller="com.zigma.Controller">
這意味着我在以下和之前丟失了 1 個字母:
如何替換:
不丟失那些邊字母,
正則表達式本身是否有任何選項,或者我們需要執行循環和條件並像這樣拆分?
預期輸出是
<AnchorPane prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/8" xmlns__NS__fx="http://javafx.com/fxml/1"
fx__NS__controller="com.zigma.Controller">
捕獲:
之前的字母,因此可以將其添加到替換中,並先行查找:
之后的字母,因此不會匹配。 另請注意,由於您使用的是不區分大小寫的標志,因此無需重復[A-Za-z]
,並且不需要對冒號進行轉義:
const data = `<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.zigma.Controller"> `; console.log(data.replace(/([az]):(?=[az])/gi, '$1__NS__'));
根據您輸入的形狀,您或許可以改用單詞邊界:
const data = `<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.zigma.Controller"> `; console.log(data.replace(/\\b:\\b/gi, '__NS__'));
對於更強大的東西,我建議將字符串解析為 XML 文檔,然后遍歷文檔的元素,將包含:
模式的屬性替換為新屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.