当我尝试接收3部分正则表达式时,如果字符串不完全等于正则表达式,则返回错误Uncaught TypeError: Cannot read property '1' of null
。
如何一次性接收正则表达式的每个部分
var str = this.value;
var da = str.match(/(\+7)(\d{3})(\d{3})/);
var newStr = da[1] + "(" + da[2] + ")" + da[3];
如果str == +7则如何接收da [1],如果没有错误,str == +7 922则为da [2]?
答案 0 :(得分:2)
您可以使用?
关注第二个捕获组,使其成为可选项:
var da = str.match(/(\+7)(\d{3})?/);
// -----------------------------^
然后,对于字符串"+7"
,匹配将成功,da[1]
将为+7
,da[2]
将为undefined
。
更新:对于您添加到问题中的第三个捕获组也是如此。 : - )