如何解决正则表达式仅替换一个匹配项
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">
如何替换:
而又不丢失副字母,
正则表达式本身是否有任何选择,还是我们需要执行循环和条件并像这样拆分?
预期输出为
<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(/([a-z]):(?=[a-z])/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文档,然后遍历文档的元素,用新属性替换包含:
模式的属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。