2010-11-16 1 views
8

Прошло много времени с тех пор, как я коснулся регулярных выражений. Это просто, но я вытягиваю свои волосы.JavaScript Regular Expression - Извлечение числа из следующего слова:

У меня есть строка, как показано ниже, которую я получаю от DOM "MIN20, MAX40". Я хочу иметь возможность использовать регулярное выражение в JavaScript для извлечения целого числа рядом с MIN и целого рядом с MAX и помещать в отдельные переменные min и max. Я не могу понять, как это сделать.

Благодаря тому, кто когда-либо помогает мне, вы станете спасателем жизни!

Приветствия

ответ

15

Вы можете использовать:

var input = "MIN20, MAX40"; 
var matches = input.match(/MIN(\d+),\s*MAX(\d+)/); 
var min = matches[1]; 
var max = matches[2]; 

JSfiddle link

+1

Это делает работу для меня. Хотя пример Тима Дауна хорош при необходимости более двух значений. Спасибо вам всем – Tom

+0

Спасибо, что указали пример Тима Дауна для будущих читателей – Martin

0
var str = "MIN20, MAX40"; 
value = str.replace(/^MIN(\d+),\sMAX(\d+)$/, function(s, min, max) { 
    return [min, max] 
}); 

console.log(value); // array 
+0

Это не приводит в массив. typeof value == "string" (в Google Chrome как минимум) – thorn

+0

как странно ... Я пробовал в FF 3.6.12, в любом случае решение codaddict является лучшим – 2010-11-16 11:37:18

2

Следующая извлечет следующие номера "MIN" и "MAX" в массивы целых чисел, называемых mins и maxes:

var mins = [], maxes = [], result, arr, num; 
var str = "MIN20, MAX40, MIN50"; 

while ((result = /(MIN|MAX)(\d+)/g.exec(str))) { 
    arr = (result[1] == "MIN") ? mins : maxes; 
    num = parseInt(result[2]); 
    arr.push(num); 
} 

// mins: [20, 50] 
// maxes: [40] 
0

Это должно сделать трюк.

var str='MIN20, MAX40'; 

min = str.match(/MIN(\d+),/)[1]; 
max = str.match(/MAX(\d+)$/)[1]; 
4

Я думаю, что это будет работать:

var matches = "MIN20, MAX40".match(/MIN(\d+), MAX(\d+)/); 
var min = matches[1]; 
var max = matches[2]; 
+1

+1! Чистый и простой (вы можете добавить чек на 'match', чтобы сделать его еще лучше). – jwueller

+0

Если мы пойдем так просто, нет необходимости в регулярном выражении. Мы могли бы просто выполнить «var str =» MIN20, MAX40 », min = str.slice (3, 5), max = str.slice (10, 12);' –

+0

или даже проще 'min = 20, max = 40; ': D – 2010-11-16 15:59:29

Смежные вопросы