Подтвердить что ты не робот

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

У меня длинная строка в javascript, например

var string = 'abc234832748374asdf7943278934haskhjd';

Я пытаюсь сопоставить, например

abc234832748374 - то есть - я пробовал как

string.match(\abc[^abc]|\def[^def]|), но это не дает мне обе строки, потому что мне нужны числа после них?

В принципе мне нужно abc + 8 символов после и def после 8-11 символов после? Как я могу это сделать?

4b9b3361

Ответ 1

Если вам нужны литеральные строки abc или def, за которыми следуют 8-11 цифр, вам нужно что-то вроде:

(abc|def)[0-9]{8,11}

Вы можете протестировать его здесь: http://www.regular-expressions.info/javascriptexample.html

Помните, что если вы не хотите сопоставлять более 11 цифр, вам понадобится привязка (или [^0-9]) в конце строки. Если это всего 8 или больше, вы можете заменить {8,11} на {8}.

Ответ 2

Чтобы уточнить уже отправленный ответ, вам нужно глобальное соответствие следующим образом:

var matches = string.match(/(abc|def)\d{8,11}/g);

Это будет соответствовать всем подмножествам строки, которые:

  • Начните с "abc" или "def". Это часть "(abc | def)"
  • Затем следуют 8-11 цифр. Это часть "\ d {8,11}". \d соответствует цифрам.

Флаг "g" (глобальный) получает список всех совпадений, а не только первый.

В вашем вопросе вы указали 8-11 символы, а не цифры. Если неважно, являются ли они цифрами или другими символами, вы можете использовать ".". вместо "\ d".

Я также замечаю, что каждый из ваших совпадений соответствует более чем 11 символам, следующим за "abc" или "def". Если какое-либо количество цифр будет выполнено, может быть лучше подходит следующее регулярное выражение:

  • Любое количество цифр - var matches = string.match(/(abc|def)\d*/g);
  • Как минимум одна цифра - var matches = string.match(/(abc|def)\d+/g);
  • Не менее 8 цифр - var matches = string.match(/(abc|def)\d{8,}/g);

Ответ 3

Вы можете сопоставить abc[0-9]{8} для строки abc, за которой следует 8 цифр.

Если первые три символа являются произвольными, а после них - 8-11 цифр, попробуйте [a-z]{3}[0-9]{8,11}

Ответ 4

Используйте следующее выражение для получения точного соответствия,

string.match(/(abc|def)\d{8,11}/g);

Заканчивается на g

"g" для глобальных

"i" для ignoreCase

"m" для многострочных