基本上我有以下内容:
我希望看到的输出是ABC-DEF-GHI
我想它会像"XXX-XXX-XXX".replace("regex", "ABCDEFGHI");
问题在于模板是动态的。它可以是XXX-XXX-XXX
或XX-XXXX-XXX
或任何其他可以包含任何特殊字符的组合,但匹配的字符始终为X
。
模板的长度或特殊字符分隔的组数不受限制。
只要有与输入字符数相同的X,XX-X-X
和XXX-XXX-XXX-XXX-X
都是有效的模板。
到目前为止,我有这个:"/^([^a-zA-Z0-9]*X){9}[a-zA-Z0-9]*$/"
,它将验证我的模板。
有人可以对此有所了解吗?有没有办法用模板中的一个字符替换模板中的一个匹配字符?
答案 0 :(得分:1)
基本上您需要将简单模板转换为REGEX,然后使用REGEX执行此操作:
予。 创建替换:
^X+(\W)X+(\W)X+$
替换为\\1\1\\2\2\\3
XXX-XXX-XXX
转换为\1-\2-\3
explained demo here II。 创建匹配 :(两步)
^(X+)\W(X+)\W(X+)$
替换为(\1)(\2)(\3)
XXX-XXX-XXX
转换为(XXX)(XXX)(XXX)
explained demo here X
替换为点(.
作为单个字符匹配),超过上述操作(XXX)(XXX)(XXX)
转换为(...)(...)(...)
explained demo here 现在,您可以将新的匹配字符串(...)(...)(...)
和新的替换字符串\1-\2-\3
与输入字符串ABCDEFGHI
一起使用,并获取ABC-DEF-GHI
explained demo here
注意:我假设您的模板会将输入字符串拆分为3个部分,其中包含2个(变量)特殊字符
如果模板包含可变部件,则必须提前创建匹配和替换模式:
使用正则表达式:\W
计算模板中的部分,然后创建匹配和替换模式。