пожалуйста, извлеките немного информации из этой строки (без регулярных выражений, чтобы я мог понять это) - PullRequest
1 голос
/ 28 октября 2010

В моем веб-приложении я смотрю на текущий URL-адрес, и если текущий URL-адрес представляет собой такую ​​форму:

http://www.domain.com:11000/invite/abcde16989/root/index.html

-> Все, что мне нужно,Извлеките идентификатор, который состоит из 5 букв и 5 цифр (abcde16989) в другую переменную для дальнейшего использования.

Так что мне нужно это:

var current_url = "the whole path, not just the hostname";

if (current_url has ID)
    var ID = abcde16989;

Ответы [ 3 ]

4 голосов
/ 28 октября 2010

Вы всегда можете использовать split, используя / в качестве разделителя, если идентификатор всегда будет в одной и той же позиции, например,

var parts = current_url.split('/');
var id = parts[4];

Хотя ваше требование совпадения "5 букв и 5числа "действительно подходит для соответствия регулярному выражению.

var id = current_url.match(/[a-zA-Z]{5}[0-9]{5}/); // returns null if not found
1 голос
/ 28 октября 2010

Во-первых, это не требует JQuery; это простой Javascript. Я исправлю ваши теги после того, как отвечу, чтобы отразить это.

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

Так что я все равно отвечу опцией regex, а затем перейду к другим опциям:

var url = "http://www.domain.com:11000/invite/abcde16989/root/index.html";

//first method:
var id = url.match('^http://www.domain.com:11000/invite/(.+)/root/index.html$')[1];/index.html$/)[1];

//second method: (if you don't know exact format of the rest of the URL but you do know the format of the ID string)
var id = url.match('/([a-z]{5}[0-9]{5})/')[1];

Первый метод получит строку в позиции, указанной вами в URL. Это не будет проверять форматирование; он просто смотрит на оставшуюся часть URL-адреса и берет часть, которую вы запрашиваете. Это должно быть действительно легко понять: это в основном только ваш URL, но с (. +), Куда идет ваш ID.

Второй метод специально ищет строку в том формате, который вы просили - то есть пять букв, а затем пять цифр. По общему признанию, это немного сложнее для чтения, но оно должно быть достаточно понятным, если вы посмотрите на него с учетом этих критериев.

В обоих случаях регулярное выражение само возвращает массив результатов, причем нулевым элементом массива является вся строка (т. Е. В первом случае, включая оставшуюся часть URL). Это где (скобки) входят (то есть, где мы сказали (.+)). Это говорит функции соответствия помещать содержимое скобок в другой элемент массива, чтобы мы могли его использовать. В обоих случаях это означает, что мы можем прочитать идентификатор в элементе массива [1].

Хорошо, а как насчет опций без регулярных выражений:

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

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

Что-то вроде этого:

var prefixstring="http://www.domain.com:11000/invite/";
var prefixlen=prefixstring.length;
var idlen=10;

var id = url.substring(prefixlen,idlen+prefixlen);

Получает длину части URL-адреса перед идентификатором, а затем использует substring (), чтобы выделить необходимый бит. Но я уверен, что вы согласитесь, что параметры регулярных выражений проще? ; -)

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

1 голос
/ 28 октября 2010

Я предполагаю, что вам нужен не полный URL, а только путь для получения вашего идентификатора. Используйте следующее:

var current_url = window.location.pathname; //gets the pathname
var split_url = current_url.split('/'); //splits the path at each /
current_id = split_url[2]; //1st item in array is "invite", 2nd is your id, 3rd would be "root"
alert(current_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...