gpt4 book ai didi

javascript - JS RegEx .replace() 条件模式和子组

转载 作者:行者123 更新时间:2023-11-29 20:00:15 25 4
gpt4 key购买 nike

我需要格式化比利时电话号码。根据城市的不同,本地前缀的长度为 1 或 2 个字符,我不知道如何编写一个 RegEx 来匹配所有字符...

这是我到目前为止所得到的,它有效,但需要 2 个步骤:

2个字符前缀:

/(0{0,3}32)(93|92|89|87|86|85|84|83|82|81|80|71|69|67|65|64|63|62|61|60|59|58|57|56|55|54|53|52|51|50|28|26|25|22|19|16|15|14|13|12|11|10)([0-9]{2})([0-9]{2})([0-9]{2})/

1个字符前缀:

/(0{0,3}32)(9|8|7|6|5|4|3|2)([0-9]{3})([0-9]{2})([0-9]{2})/

和模式:

"+$1 $2 $3 $4 $5"

知道如何组合这两个 RegEx 以及对 .replace() 使用相同的模式吗?

最佳答案

封装检查和格式化的自定义对象怎么样?

function BelgianPhoneNumber(inputStr) {
var re = /0{0,3}32(?:(9[23]|8[0-79|7[1]|6[0-579]|5[0-9]|2[2568]|1[0-69])([0-9]{2})|([2-9])([0-9]{3}))([0-9]{2})([0-9]{2})/,
match, area, grp1, grp2, grp3;

if (match = re.exec(inputStr)) {
if (match[1]) {
area = match[1];
grp1 = match[2];
} else {
area = match[3];
grp1 = match[4];
}
grp3 = match[5];
grp4 = match[6];
} else {
area = grp1 = grp2 = grp3 = "";
// possibly throw error
}

this.toString = function () {
if (match) {
return ["+32", area, grp1, grp2, grp3].join(" ");
} else {
return "invalid phone number: " + inputStr;
}
}
}

用法

var p = new BelgianPhoneNumber("003233437667");
console.log("Phone: " + p); // -> Phone: +32 3 343 76 67

var p = new BelgianPhoneNumber("003287565656")
console.log("Phone: " + p); // -> Phone: +32 87 56 56 56

不过,我不知道这两个编号模式是否可以重叠,在匹配时会产生误报。

但是,当有疑问时,正则表达式更倾向于使用 2 位区号而不是 1 位区号。如果您想要反过来,请更改“选择...”组的顺序。

自定义对象的一个​​论据是您可以轻松添加方法,如 .getAreaCode() 或将区号映射到城市名称的方法。由于覆盖了 .toString() 方法,您仍然可以直接在字符串中使用它。

组合的正则表达式分解为

0{0,3}32               # constant prefix, therefore no group(?:                    # choice: either...  (9[23]|8[0-79|7[1]|6[0-579]|5[0-9]|2[2568]|1[0-69])   # 2-digit area code  ([0-9]{2})                                            # first group (2 digits)  |                                                     # or...  ([2-9])                                               # 1-digit area code  ([0-9]{3})                                            # first group (3 digits))                      # end choice([0-9]{2})             # second group (2 digits)([0-9]{2})             # third group (2 digits)

关于javascript - JS RegEx .replace() 条件模式和子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com