Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите правильно написать регулярное выражение (https://javascript.ru/forum/misc/25748-pomogite-pravilno-napisat-regulyarnoe-vyrazhenie.html)

fredrsf 14.02.2012 12:28

Помогите правильно написать регулярное выражение
 
На вход:
от 2000 до 3000
до 2000
от 5000
На выходе:
2000 3000
2000
5000

То есть, если строка от 2000 до 3000, то нужно получить два числа в разных переменных. Если до 2000, то надо число в переменную, но понимать при этом что было до. Если от 5000, то число в переменную, но понимать при этом, что от.

Вот такое в первом случае работает: /(от [0-9]+ до [0-9]+)/
Вот такое /(от [0-9]+)/ работает и в первом случае и третьем, а нужно чтоб только в третьем сработало. Как это сделать?

nerv_ 14.02.2012 12:43

var x = "от 2000 до 3000".split(" "); //так не проще?
alert( x.join("\n") );

fredrsf 14.02.2012 13:10

Действительно проще) Спасибо!

devote 14.02.2012 13:17

var re = /^(?:от (2[0-9]{3}) до (2[0-9]{3}|3000))?(?:от ([5-9][0-9]{3}|[0-9]{5,})$)?(?:до (1[0-9]{3}|2000|[0-9]{1,3})$)?/;

var m = re.exec( 'до 200' );

if ( m[1] && m[2] ) {
    alert( 'from ' + m[1] + ' to ' + m[2] );
} else if ( m[3] ) {
    alert( 'from ' + m[3] );
} else if ( m[4] ) {
    alert( 'to ' + m[4] );
} else {
    alert( 'Unknown matching' );
}

Mахmахmахimus 14.02.2012 14:30

Цитата:

Сообщение от fredrsf
Вот такое /(от [0-9]+)/ работает и в первом случае и третьем, а нужно чтоб только в третьем сработало.

условиями if это делается


var regAll = /от\s\d+\sдо\s\d+/;
var regFtom = /от\s\d+/;
var regTo = /до\s\d+/;

function test(string) {

	all = '';
	from = '';
	to = '';

	if (regAll.test(string)) {
		all = string;
	} else if (regFtom.test(string)) {
		from = string;
	} else if (regTo.test(string)) {
		to = string;
	}

}

test(" тут твоя строка")


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