Как настроить мое регулярное выражение, чтобы заменить только сокращения, а не расширения? - PullRequest
2 голосов
/ 02 апреля 2019

Как мне исправить это регулярное выражение, чтобы не трогать расширения, такие как HYDRAULIC, и конвертировать только HYD и HYD. в HYDRAULIC и исправить проблему с пространством (для HYD.CYLINDER)?

Ссылка на регулярное выражение

Регулярное выражение (hyd. и hyd):

\b(hyd)(?:\s|$|[^\w])

Тестовая строка:

HYD. CYLINDER
HYD CYLINDER
HYD.CYLINDER
HYDRAULIC CYLINDER
CYLINDER,HYD.
CYLINDER,HYDRAULIC
CYLINDER,HYD
CYLINDER, HYD.
CYLINDER, HYDRAULIC
CYLINDER,HYD

Подстановка:

HYDRAULIC

HYDRAULIC CYLINDER
HYDRAULICCYLINDER
HYDRAULICCYLINDER
HYDRAULIC CYLINDER
CYLINDER,HYDRAULIC
CYLINDER,HYDRAULIC
CYLINDER,HYDRAULICCYLINDER, HYDRAULIC
CYLINDER, HYDRAULIC
CYLINDER,HYDRAULIC

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Вы можете использовать

s = s.replace(/\bhyd(?:\.|\b)([a-z0-9]?)/gi, function($0, $1) { 
    return "HYDRAULIC" + ($1 ? " " + $1 : "") ; 
})

См. Демоверсию regex .

Regex details

  • \b - граница начального слова
  • hyd - подстрока
  • (?:\.|\b) - точка или граница слова
  • ([a-z0-9]?) - Группа захвата 1: необязательный буквенно-цифровой символ.

Если группа 1 совпадает, совпадение заменяется на HYDRAULIC + пробел + буква, захваченная в группе 1, иначе оно заменяется просто HYDRAULIC.

Обратите внимание, что \bhyd(?:\.|\b) и \bhyd\b\.? , предложенные Четвертой птицей , являются синонимами.

JS демо:

var strs = ['HYD. CYLINDER','HYD CYLINDER','HYD.CYLINDER','HYDRAULIC CYLINDER','CYLINDER,HYD.','CYLINDER,HYDRAULIC','CYLINDER,HYD','CYLINDER, HYD.','CYLINDER, HYDRAULIC','CYLINDER,HYD'];
var rx = /\bhyd(?:\.|\b)([a-z0-9]?)/gi;
for (var s of strs) {
  console.log(s, "=>", s.replace(rx, function($0, $1) { 
    return "HYDRAULIC" + ($1 ? " " + $1 : "") ; 
  }))
}
0 голосов
/ 02 апреля 2019

Просто используйте этот шаблон: \b(hyd)\W+

Только новый - \W+ - соответствует одному или нескольким несловарным символам.

Затем замените его на HYDRAULIC (пробел вконец!).

Демо

0 голосов
/ 02 апреля 2019

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

\b(hyd\.?)(?:\s|$|[^\w])

и подпункт "HYDRAULIC" с пробелом в конце

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...