Как сопоставить подстроки в установленном порядке с помощью Javascript Regex - PullRequest
0 голосов
/ 30 мая 2018

Учитывая слово «бабочка», я хотел бы вернуть совпадения, которые содержат только 5 или более последовательных символов из «бабочки».

Контрольные примеры:

  1. «масло»будет совпадением.
  2. 'terfly' будет совпадением.
  3. 'bXutterfly' будет совпадением (соответствует подстроке 'utterfly')
  4. 'butt' НЕ будет совпадением (менее 5 последовательных символов).

Текущий код совпадает, когда не должен, потому что 5 сопоставляемых символов не являются последовательными, я понимаю, это потому, что строка находится внутри [square braces]:

const str = 'ylfrettbu';
const regex = new RegExp('[butterfly]{5,}', 'gi');
const matched = str.match(regex);

Соответствующая строка должна быть динамической, следовательно: new RegExp

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете запустить следующее регулярное выражение для строки, которую вы хотите сопоставить:

(?=(.{5}))

заменить на (для каждого совпадения)

$1|

https://regex101.com/r/dDJYh1/1

Результатом является регулярное выражение, которое вы можете использовать для фактических данных, которые вы ищете.(butte|utter|tterf|terfl|erfly для butterfly)

Я только что заметил, что regex101 не показывает разбивку ниже, которую он показывает справа для групп захвата.Группы захвата на справа являются правильными.Я не совсем уверен, как js разбивает это, так что, надеюсь, кто-то еще может дать вам более полный ответ или отредактировать мой.

Я действительно не знаю js, но это кажетсясделать трюк:

var re = /(.)(?=(.{4}))/g;
var s = "butterfly";

var m = re.exec(s);
do {
    print(m[1]+m[2]);
    m = re.exec(s);
}while(m)
0 голосов
/ 30 мая 2018

ylfrettub будет соответствовать всей строке.Вы можете использовать что-то вроде b? U? T? T? E? R? F? L? Y?который сохраняет порядок слов.Может быть, вам нужно решение, такое как расстояние редактирования, расстояние Левенштейна или что-то такое же.

https://en.wikipedia.org/wiki/Levenshtein_distance

Я нашел это путем поиска в Google.https://github.com/schulzch/edit-distance-js

Возвращает разницу между словами.

Расстояние редактирования бабочки и butterXfly равно 1. Расстояние редактирования бабочки и бабочки равно 1. Расстояние редактирования бабочки и прикладаравно 5. Расстояние редактирования бабочки и bXuXtXtXeXrfly равно 5. Расстояние редактирования бабочки и ylfrettub должно быть 8. Я не проверял это.

...