2015-10-01 6 views
0

В скрипкой: http://jsfiddle.net/rtucgv74/Regex чтобы соответствовать обугленного/цифры/цифры/цифры

Я пытаюсь соответствовать первый символ с 3-х цифр. Поэтому ниже код должен предупредить f234. Но вместо этого возвращается null?

ЦСИ:

var reg = /^\[a-zA-Z]\d{3}/; 

alert(reg.exec(("test f234 sadfas")[1])) 

Как извлечь обугленные/цифру/цифры/цифры из строки?

+1

Если это не 'reg =/^ [a-zA-Z] \ d {3} /;' без обратной косой черты. – anubhava

ответ

2

Почти правильно, но первая обратная косая черта в вашем регулярном выражении делает [ совпадением фактической скобки вместо определения набора символов.

И ^ не позволяет совместить что-либо не в начале строки.

Так правильное регулярное выражение /[a-zA-Z]\d{3}/ или /[a-z]\d{3}/i

Другая проблема заключается в том, что вы пытаетесь прочитать второй элемент результирующего массива. Но вы не захватываете что-либо в своем регулярном выражении, так что будет только один элемент ([0]), который является целым совпадением.

Try:

reg.exec("test f234 sadfas")[0] 
+0

Что такое char i в регулярном выражении? –

+0

@ blue-sky это флаг, создающий регулярное выражение без учета регистра. – Touffy

+0

ah, right ... не заметил, что другая проблема в вашем коде ... редактирование моего ответа, дайте мне минуту – Touffy

0

\ в своем регулярном выражении ускользает характер [и делает его нон особенным. И символ^запрещает вашему регулярному выражению соответствовать любой части, которая не находится в начале строки.

Так что это будет работать:

var reg = /[a-zA-Z]\d{3}/; 
alert(reg.exec("test f234 sadfas")[0]); 

Обратите внимание, что есть только один элемент в результате, потому что ваше регулярное выражение не содержат какой-либо захват (символы в скобках).

+0

Пожалуйста, подумайте о редактировании сообщения, чтобы добавить больше объяснений о том, что делает ваш код и почему он решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает OP понять их проблему. – SuperBiasedMan

+0

Готово даже ответ уже принят :). –

0

попробовать что-то вроде этого:

var reg = /[a-zA-Z]{1}[0-9]{3}/; 

alert("test f234 asdfghj".match(reg)) 

Check the Demo fiddle

UPDATE с краевой ПОДДЕРЖКОЙ:

Регулярное выражение также будет соответствовать частям слов, как абы C123 35 так, чтобы аннулировать это поведение, которое вы можно попробовать следующее регулярное выражение:

var reg = /\b[a-zA-Z]{1}[0-9]{3}\b/; 

alert("test aaf23412 asdfghj".match(reg)) // not match 
alert("test f234 asdfghj".match(reg)) // match ! 
alert("test f2343 asdfghj".match(reg)) // not match 

Check the demo fiddle 2

0

В вашем примере, вы выбирая строку из «предложения», поэтому удалите ^. Также удалите \, который ускользает от [. Так что вы хотите:

[a-zA-Z]\d{3} 

Попробуйте здесь: http://regexr.com/3bta7

-1

Это может помочь вам найти первый символ, возникающий перед тем 3 цифры:

\ ш (?= \ d {3}).

+0

К сожалению, '\ w' также соответствует цифрам. – Touffy

Смежные вопросы