Борьба с Regex для изменения поддоменов и поддоменов - PullRequest
0 голосов
/ 03 сентября 2011

Я получил это от другого поста:

host = ".mylocal.com";
var reg = new RegExp('^https?://([^.]*' + host + ')');
console.log(reg.test('http://www.mylocal.com/'));

, но может совпадать только с www.mylocal.com, независимо от .mylocal.com, но не на два уровня ниже, как dev.www.mylocal.com

Я пытался написать что-то еще, но не смог проверить это. или даже 3, 4 уровня вниз. :( как мне написать?

Итак, чего бы я хотел достичь, так это:

.local.com
will match:
www.local.com
dev.www.local.com
abc.dev.abc.local.com

and 
www.local.com
will only match 
www.local.com
NOT dev.www.local.com

:) это более понятно

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Основная проблема заключается в том, что вы хотите сопоставить все виды префиксов, после которых следует host, если host начинается с .;но вы хотите сопоставить host в одиночку, если нет.Это можно сделать с помощью предварительных утверждений, но, поскольку вы все равно создаете регулярное выражение, гораздо проще просто создать его по-разному в зависимости от случая.Я не знаю Javascript, поэтому я буду использовать псевдокод.

Для первого случая мы хотим сопоставить ноль или более (не захватывающих) групп непериодов, за которыми следует один период, затем по крайней мереодин непериод, все до host.Для второго случая мы просто хотим сопоставить host.

if host starts with '.':
    var reg = new RegExp('^https?://((?:[^.]+\.)*[^.]+' + host + ')');
else:
    var reg = new RegExp('^https?://(' + host + ')');
0 голосов
/ 03 сентября 2011

не уверен, что ты пытаешься сделать. это регулярное выражение будет соответствовать любому количеству уровней:

r = new RegExp("^https?://([^.]+[.])*([^.])+$");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...