Соответствие строки в регулярном выражении?
У меня длинная строка в javascript, например
var string = 'abc234832748374asdf7943278934haskhjd';
Я пытаюсь сопоставить, например
abc234832748374
- то есть - я пробовал как
string.match(\abc[^abc]|\def[^def]|)
, но это не дает мне обе строки, потому что мне нужны числа после них?
В принципе мне нужно abc
+ 8 символов после и def
после 8-11 символов после? Как я могу это сделать?
Ответы
Ответ 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"
для многострочных