2012-02-20 6 views
0

строка str содержит где-то внутри нее http://www.example.com/, а затем 2 цифры и 7 случайных символов (в верхнем или нижнем регистре). Одна из возможностей - http://www.example.com/45kaFkeLd или http://www.example.com/64kAleoFr. Таким образом, единственный аспект заключается в том, что он всегда начинается с двух цифр.Regex in javascript complex

Я хочу получить «64kAleoFr».

var url = str.match([regex here]);

ответ

1

Регулярное выражение вы ищете является /[0-9]{2}[a-zA-Z]{7}/.

var string = 'http://www.example.com/64kAleoFr', 
    match = (string.match(/[0-9]{2}[a-zA-Z]{7}/) || [''])[0]; 
console.log(match); // '64kAleoFr' 

Обратите внимание, что на второй линии, я использую good old .match() trick, чтобы убедиться, что нет TypeError не отбрасывается, когда совпадение не найдено. Как только этот фрагмент будет выполнен, match будет либо пустой строкой (''), либо значением, которое вы использовали.

+0

нормально, дай мне попробовать, что –

+0

Вот демо: http://jsfiddle.net/rwffa/ –

+0

Ницца использования трюка матча, но разве URL-адрес не должен быть в regex тоже? Вопрос сказал, что он будет содержаться в большей строке, поэтому, по-видимому, по крайней мере возможно, что большая строка может иметь «99aAaAaAa» в ней где-то до фактического URL-адреса. – nnnnnn

0

можно использовать

var url = str.match(/\d{2}.{7}$/)[0]; 

где:

\d{2} //two digits 
.{7} //seven characters 
$ //end of the string 

, если вы не знаете, если это будет в конце концов, вы могли бы использовать

var url = str.match(/\/\d{2}.{7}$/)[0].slice(1); //grab the "/" at the begining and slice it out 
+0

он возвращает 'undefined' для меня. см. [jsfiddle] (http://jsfiddle.net/7FFrF/) –

+0

@ AnthonyNewman на всякий случай, если вы хотите знать, скрипка возвращает undefined, потому что вы предупреждаете позицию 1 массива, а массивы javascript основаны на нулевом значении. Итак, 'alert (matches [0]);' works fine – NicoSantangelo

0

что об использовании раскол ?

alert("http://www.example.com/64kAleoFr".split("/")[3]); 
+0

Вопрос говорит, что url будет где-то посередине более длинной строки, поэтому предположительно в строке могут быть другие символы//. – nnnnnn

0

http://www\\.example\\.com/([0-9]{2}\\w{7}) это ваш узор. Вы получите ваши 2 цифры и 7 случайных символов в группе 1.

+0

Не забудьте избежать полных остановок. – nnnnnn

0
var url = "http://www.example.com/", 
    re = new RegExp(url.replace(/\./g,"\\.") + "(\\d{2}[A-Za-z]{7})"); 

str = "This is a string with a url: http://www.example.com/45kaFkeLd in the middle."; 

var code = str.match(re); 

if (code != null) { 
    // we have a match 
    alert(code[1]); // "45kaFkeLd" 
}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

URL-адрес должен быть частью регулярного выражения, если вы хотите, чтобы избежать согласования других строк символов в другом месте на входе. Вышеприведенное предполагает, что URL-адрес должен быть конфигурируемым, поэтому он создает регулярное выражение из переменной url (отмечая, что «.» Имеет особое значение в регулярном выражении, поэтому его необходимо экранировать). Бит с двумя числами и семью буквами находится в круглых скобках, чтобы он мог быть захвачен.

Демо: http://jsfiddle.net/nnnnnn/NzELc/

+0

твоя тоже! благодаря! –

0

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

Вот как:

var string = "http://www.example.com/64kAleoFr" 
ar = string.split("/"); 
ar[ar.length - 1]; 

Надеется, что это помогает