2013-09-30 4 views
0

В JavaScript, учитывая регулярное выражение шаблон и строку:Как извлечь «части» строки в соответствии с некоторым шаблоном RegExp?

var pattern = '/this/[0-9a-zA-Z]+/that/[0-9a-zA-Z]+'; 
var str = '/this/12/that/34'; 

Как вернуть массив, содержащий:

['12', '34'] 

Следующая соответствует входной строки целое и, таким образом, возвращает его в целом.

var res1 = '/this/12/that/34'.match(/\/this\/[0-9a-zA-Z]+\/that\/[0-9a-zA-Z]+/)); 

Следующие совпадения соответствуют всем «частям» входной строки.

var res2 = '/this/12/that/34'.match(/[0-9a-zA-Z]+/g)); 
+1

вы можете использовать это .. ' '/this/12/that/34'.match (/ (\ д +)/г) '. –

ответ

2

Использование захвата группы:

var res1 = '/this/12/that/34'.match(/\/this\/([0-9a-zA-Z]+)\/that\/([0-9a-zA-Z]+)/); 

вы получите массив, содержащий 3 элемента:

  1. весь матч;

  2. 12

  3. 34

И вы можете использовать .slice(1) для удаления первого элемента:

var res1 = '/this/12/that/34'.match(/\/this\/([0-9a-zA-Z]+)\/that\/([0-9a-zA-Z]+)/).slice(1); 
+0

отлично, работает ... спасибо – Scholle

+0

@Scholle Добро пожаловать ^^ – Jerry

2

В Regex, вы можете использовать круглые скобки, чтобы разграничить "группы захвата" , Затем они могут быть извлечены из вашего матча. Следует также отметить, что регулярные выражения являются литералами в JavaScript, вы не должны ставить кавычки вокруг них (вместо этого используются слэши), и вы должны бежать должным образом.

Например, если вы используете это регулярное выражение:

var pattern = /\/this\/([0-9a-z]+)\/that\/([0-9a-z]+)/i; 
// that final "i" avoids the need to specify A-Z, it makes the regex ignore case 

Теперь, когда вы подходите его против вашей строки:

var match = str.match(pattern); 

Ваш результат будет выглядеть следующим образом:

["/this/12/that/34","12","34"] 

Примечание что первый индекс массива всегда будет вашим полным совпадением. Вы можете использовать .shift нарезать его:

match.shift(); 

Теперь match выглядит следующим образом:

["12","34"] 
Смежные вопросы