Regex удаляет предыдущий символ, если за ним следует символ - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю над выражением регулярного выражения. У меня есть два слова 1234a и 1234. Если здесь есть «a», я хочу, чтобы он возвратил только 123. Если нет «a», то я хочу, чтобы он возвратил 1234.

Так как механизм регулярных выражений запускается слева направо в правильном положении, я не могу вернуться, чтобы удалить 4, если присутствует «а». Можно ли сделать это в регулярном выражении? Любая помощь / предложение приветствуется.

ОБНОВЛЕНИЕ: ответ Тото работает хорошо. Но как продолжение вышеупомянутой проблемы, если слово test1234, например, мне нужно, чтобы он возвратил test123, если есть «a», если «a» там нет возврата test1234. Я пытался изменить регулярное выражение из Toto, но он выделяет все.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2020

Это другой подход, чем регулярное выражение. Для регулярного выражения вы можете обратиться к комментарию / ответу Тото

function getString(str) {
  return str.includes('a') ? str.substring(0, str.indexOf('a') - 1) : str;
}

let str1 = '1234a';
let str2 = '1234';
let str3 = '1234a12312';

console.log(getString(str1));
console.log(getString(str2));
console.log(getString(str3));
0 голосов
/ 11 февраля 2020

Одним из способов точной замены, запрашиваемой в OP, была бы простая подстановка s / .a //, которая заменяет любую подстроку длины 2, заканчивающуюся на 'a', пустой строкой. Не нужно смотреть вперед или возвращаться назад.

0 голосов
/ 11 февраля 2020

Если ваш инструмент поддерживает прогноз, используйте:

\b([^\Wa]+(?=[^\Wa]a.*)|\w+$)

Демонстрация и объяснение

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