0

正規表現の 3 つの部分を取得しようとすると、文字列が正規表現と完全に等しくない場合、エラーが返されますUncaught TypeError: Cannot read property '1' of null

1回の試行で正規表現の各部分を受け取る方法

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] をエラーなしで受け取るにはどうすればよいですか?

4

1 に答える 1

2

2 番目のキャプチャ グループの後に続けて、?オプションにすることができます。

var da = str.match(/(\+7)(\d{3})?/);
// -----------------------------^

次に、文字列"+7"の場合、一致は成功し、da[1]になり+7、 にda[2]なりますundefined

更新:質問に追加した3番目のキャプチャグループについても同様です。:-)

于 2013-07-29T17:57:37.500 に答える