Regex将格式模板替换为字符串,以便结果是格式化的字符串


Regex replace format template with a string so that the result is a formatted string

基本上我有以下内容:

  • 输入字符串(如ABCDEFGHI)
  • 输入模板(如XXX-XXX-XXX)

,我想看到的输出是ABC-DEF-GHI

我想象它是这样的"XXX-XXX-XXX".replace("regex", "ABCDEFGHI");

问题在于模板是动态的。它可以是XXX-XXX-XXXXX-XXXX-XXX或任何其他可以包含任何特殊字符的组合,但要匹配的字符始终是X

模板不受长度或由特殊字符分隔的组数量的限制。即XX-X-XXXX-XXX-XXX-XXX-X都是有效的模板,只要输入字符X的个数相同。

到目前为止,我有这个:"/^([^a-zA-Z0-9]*X){9}[a-zA-Z0-9]*$/",它将验证我的模板。

有人能解释一下吗?是否有一种方法可以用字符串中的一个字符替换模板中的一个匹配字符?

基本上你需要将你的简单模板转换成REGEX,你可以使用REGEX:

创建替换:

  • ''1'1''2'2''3替换^X+('W)X+('W)X+$
  • 这将把XXX-XXX-XXX转换成'1-'2-'3在这里解释演示

二世。创建匹配:(两步)

  1. 创建三个组:
    • ('1)('2)('3)替换^(X+)'W(X+)'W(X+)$
    • 这将把XXX-XXX-XXX转换成(XXX)(XXX)(XXX)在这里解释演示
  2. X替换为点(.作为单个字符匹配),在上述操作之上
    • 这将把(XXX)(XXX)(XXX)转换成(...)(...)(...)在这里解释演示

现在你可以使用新的匹配字符串(...)(...)(...)和新的替换字符串'1-'2-'3与输入字符串ABCDEFGHI,并得到ABC-DEF-GHI解释演示在这里

注意:我假设你的模板将把输入字符串分成3部分,在

之间有2个(变量)特殊字符。

更新:

如果模板有可变的部分,你必须提前创建你的匹配替换模式:
使用正则表达式:'W 对模板中的部件进行计数,然后创建匹配和替换模式。