Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проблема с регэкспом (https://javascript.ru/forum/misc/2364-problema-s-regehkspom.html)

twolf 13.12.2008 22:46

проблема с регэкспом
 
надо взять число 50 из строки, которая модет принимать вид:
АА 10 50
АА 5 50
АА 50 50 10
АА 50 50 2
т.е. числа может быть 2 или 3, двух или одно значное.
между буквами и цифрами n-пробелов

Пытаюсь сделать так
сначала нахожу /АА\s+[0-9]+\s+([1-9][0-9])/g
а потом еще раз по регулярному выр. /[1-9][0-9]$/ig

Вопрос1: можно ли сделать это в 1 строку(1 рег.выр),
Вопрос2: можно ли вместо АА в паттерне ставить переменную. если можно, то как?

Zibba 14.12.2008 03:17

1:
var reg = /АА\s+[0-9]+\s+([1-9][0-9])/;// регулярное выражение не должно содержать флага g , иначе метод match() будет работать не так как нам нужно
var text = "АА 50 50 10";
var result = text.match(reg);
if(result!=null){
	var full = result[0];// содержит найденную строку целиком
	var gg = result[1];// содержит подстроку, соответствующую первому подвыражению т.е. ([1-9][0-9])
}
alert(gg);


По второму вопросу ответить затрудняюсь.

Андрей Параничев 14.12.2008 03:38

По второму вопросу - использовать конструктор RegExp():
var substring = "AA";
var regexp = new RegExp(substring + "\s+[0-9]+\s+([1-9][0-9])");

twolf 14.12.2008 12:30

Zibba, Андрей Параничев, Спасибо!
var substring = "AA";
var regexp = new RegExp(substring + "\s+[0-9]+\s+([1-9][0-9])");

если тут сделать alert(regexp)
то получается
/AAs+[0-9]+s+([1-9][0-9])/

может что я не правильно делаю?

Андрей Параничев 14.12.2008 16:15

twolf,
Нет, это я ошибся, надо вот так:
var substring = "AA";
var regexp = new RegExp(substring + "\\s+[0-9]+\\s+([1-9][0-9])");

twolf 14.12.2008 16:45

ага, получается еще раз экранировать надо.
Андрей Параничев, спасибо еще раз


Часовой пояс GMT +3, время: 07:19.