Можно ли использовать регулярные выражения для поиска совпадений назад? - PullRequest
0 голосов
/ 24 сентября 2019

Поэтому я хотел бы найти совпадения из 2 или менее символов, которые соответствуют регулярному выражению, и поместить их в массив.Например, использование [a-z]{1,2} в строке "abcde" вернет:

["ab", "cd", "e"]

Дело в том, что [a-z]{1,2} ищет только «вперед» в строке.Я хотел бы искать «назад» что-то вроде этого.

["de", "bc", "a"]

Возможно ли сделать это только с регулярным выражением, не используя ничего JavaScript (бытьэто метод reverse() или иначе)?Я пытаюсь написать скрипт для InDesign, который использует встроенный GREP, но если здесь никто не знаком с его API, дайте предложения с помощью механизма регулярных выражений Notepad ++.

** Обратите внимание, что это должно быть ["de", "bc", "a"], НЕ *["ed", "cb", "a"].

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы можете использовать регулярное выражение с заглядыванием вперед, которое настаивает на четном количестве символов перед концом строки, а затем инвертировать результат этого.Например, в JS:

const str = 'abcde';

let a = str.match(/[a-z]{1,2}(?=([a-z]{2})*$)/g).reverse();
console.log(a);
0 голосов
/ 24 сентября 2019

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

let reversedMatch = (str) =>{
  return str.split('')
            .reverse()
            .join('')
            .match(/[a-z]{1,2}/g)
            .map(v=> v.split('').reverse().join(''))
}

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