Найти и получить только номер в строке - PullRequest
5 голосов
/ 24 февраля 2010

Пожалуйста, помогите мне разрешить эту странную ситуацию:

Вот код:

Ссылка такая - www.blablabla.ru#3

регулярное выражение так:

var id = window.location.href.replace(/\D/, '' );
alert(id);

Регулярное выражение корректно - оно должно показывать только цифры ... но оно не показывает цифры :-(

Не могли бы вы дать мне совет и предоставить некоторую информацию о том, как получить только цифры в строке?

Спасибо

Ответы [ 4 ]

12 голосов
/ 24 февраля 2010

Вы заменяете только первый нецифровый символ пустой строкой. Попробуйте использовать:

var id = window.location.href.replace(/\D+/g, '' ); alert(id);

(обратите внимание на «глобальный» флаг в конце регулярного выражения).

6 голосов
/ 24 февраля 2010

Рассмотрите возможность использования location.hash - здесь хранится только хэштег в конце URL: "#42".
Вы можете написать:

var id = location.hash.substring(1);
3 голосов
/ 24 февраля 2010

Редактировать : См. Ответ Коби . Если вы действительно используете часть хеша, просто используйте location.hash! (Самому себе: Дох!)

Но я оставлю нижеприведенное на случай, если вы делаете что-то более сложное, чем предполагает ваш пример.

Оригинальный ответ:

Как уже говорили другие, вы заменили глобальный флаг в своей замене. Но меня беспокоит выражение, оно действительно хрупкое. Подумайте: www.37signals.com#42: Ваша полученная числовая строка будет 3742, что, вероятно, не то, что вы хотите. Другие примеры: www.blablabla.ru/user/4#3 (43), www2.blablabla.ru#3 (23), ...

Как насчет:

id = window.location.href.match(/\#(\d+)/)[1];

... который дает вам непрерывный набор цифр, следующий сразу за хэш-меткой (или неопределенный, если таковых нет).

1 голос
/ 24 февраля 2010

Используйте флаг /\D/g, глобально замените все экземпляры

var id = window.location.href.replace(/\D/g, '' );
alert(id);

И /\D+/ получают лучшую производительность, чем /\D/g, по словам Джастина Джонсона, который, я думаю, из-за того, что \D+ может сопоставить и заменить его одним выстрелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...