Проблема заключается в тех символах, не являющихся ASCII, в вашем тестовом адресе, ÖßÜÄÖ
(о которых вы когда-либо упоминали только в комментарии к ответу @ HansKesting). В .NET \w
соответствует всем буквам и цифрам Unicode и даже нескольким символам, кроме _
, которые классифицируются как , соединяющие пунктуацию , но в JavaScript это соответствует только [A-Za-z0-9_]
.
В JavaScript также отсутствует поддержка свойств Юникода (например, \p{L}
для букв) и блоков (\p{IsLatin}
), поэтому вам придется перечислять любые не-ASCII-символы, которые вы хотите разрешить с помощью их экранирования Юникода (\uXXXX
) , Если вы просто хотите поддерживать буквы Latin1, я думаю, вы могли бы использовать [\w\u00C0-\u00FF]
, но IDN должен поддерживать больше, чем просто Latin1, не так ли?
Кстати, JavaScript также не поддерживает однострочный режим, и даже если бы он это сделал, вы бы не смогли его использовать. JS поддерживает режимы Multiline и IgnoreCase, но нет возможности установить их как на стороне сервера, так и на стороне клиента. Встроенные модификаторы (?i)
и (?m)
не работают в JS, а аргумент RegexOptions работает только на стороне сервера.
К счастью, вам все равно не нужен однолинейный режим; он позволяет метасимволу .
соответствовать символам перевода строки, но единственные точки в вашем регулярном выражении соответствуют буквальным точкам.