Reg ex для разделения слов верблюжьих слов по дефису в n js (javascript) - PullRequest
3 голосов
/ 30 января 2020

Мне удалось создать regEx для разбиения слов дела верблюда в Perl. Тем не менее, поскольку javascript не поддерживает положительный взгляд, мне сложно создать регулярное выражение, которое бы делало то же самое.

Входные и ожидаемые выходные данные перечислены ниже в формате Ввод -> Ожидаемый вывод

  1. InstallAndSetup -> установка и настройка

  2. Развертывание ABCDefGhijk -> deploying-ab c -def-ghijk (при условии, что ab c является существительным, которое часто используется)

  3. OpenIDConnect -> openid-connect
  4. OAuth2Scopes-> oauth2-scopes
  5. APISecurity -> api-security

Сценарий perl, который я использовал, выглядит следующим образом

 my $r = shift;
 my $uri = $r->uri;
 @uri = split /(?<=[a-z])(?=[A-Z])(?!ID)(?!^Open$)|(?<=ABC)|(?<=API)(?=[A-Z])|(?=Connect)/,$uri;
 $uri = join ("-", @uri);
 $uri = lc($uri);
 return  $uri;

Я борюсь с преобразованием этого же регулярное выражение ((? <= [az]) (? = [AZ]) (?! ID) (?! ^ Open $) | (? <= AB C) | (? <= API) (? = [ AZ]) | (? = Connect)) для работы в Javascript. Любая помощь будет оценена. </p>

1 Ответ

1 голос
/ 30 января 2020

Не уверен, что регулярное выражение является лучшим вариантом здесь, так как у вас есть смесь фиксированных слов и произвольных правил, но я думаю, что с небольшим упреждением:

(OAuth2|OpenID|[A-Z]+$|[A-Z]+(?=[A-Z][^A-Z])|[A-Z][^A-Z]+)

, который принимает OAuth2 и OpenID в качестве особых случаев - иначе любая последовательность из 2 или более заглавных букв и одной заглавной буквы, за которой следуют не заглавные буквы. Разница заключается в том, что это позволяет отыскать нужные вам части в группе (группа 1), и вы можете проходить матчи.

Если вы просто хотите преобразовать текст, вы можете использовать это:

uri.replace(/(OAuth2|OpenID|[A-Z]+$|[A-Z]+(?=[A-Z][^A-Z])|[A-Z][^A-Z]+)/, function(v) { return "-"+v.toLowerCase(); });
uri = uri.substring(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...