2014-08-29 4 views
0

Я пытаюсь извлечь номера этой строки: "ax (341); ay (20); az (3131);"Анализ синтаксических символов

Я думаю, что я могу это сделать, как это:

var ax = data.split('('); 
var ax2 = ax[1].split(')'); 

ax2 [0] имеет «341»

Теперь если я могу повторить это, но начиная с следующей IndexOf принять второй номер ,

Я думаю, что это плохая практика, поэтому я спрашиваю вас, если у вас есть идея лучше.

Заранее спасибо

+0

использование регулярных выражений смотрите здесь http://stackoverflow.com/questions/13807207/regex-find-a-number-between-parentheses – Mritunjay

ответ

4

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

var str = "ax(-341);ay(20);az(3131);" 
var regex = /(-?\d+)/g 
var match = str.match(regex); 
console.log(match); // ["-341", "20", "3131"] 

Теперь вы можете получить доступ к номерам в массиве, как обычно.

DEMO

+0

Номера могут быть отрицательными, как этот шаблон? – oscarvady

+0

@oscarvady, см. Мое редактирование. – Andy

1

Вы можете использовать регулярное выражение для извлечения всех чисел из этого.

var data = "ax(341);ay(20);az(3131);"; 
var ax = data.match(/\d+/g); 

Здесь ax теперь ["341", "20", "3131"]

Обратите внимание, что ax содержит числа как строки. Для того, чтобы преобразовать их в число, использование следующего

ax2 = ax.map(function(x){ return parseInt(x); }) 

EDIT: В качестве альтернативы вы можете использовать Number как функцию для отображения в строке выше. Это будет выглядеть,

ax2 = ax.map(Number) 

После этого ax2 содержит все целые числа в исходной строке.

+1

вы могли бы просто сказать 'ax2 = ax.map (ParseInt)' – Mritunjay

+0

Нет. Вы не можете. Это дает какой-то странный результат. Проверять. Для меня это дало [341, NaN, NaN]. См. [This] (http://stackoverflow.com/questions/262427/javascript-arraymap-and-parseint) – nisargjhaveri

+0

Это даст ошибку, потому что 'parseInt' использует второй параметр в качестве основы. Лучше использовать 'Number':' ax2 = ax.map (Number) ' – Andy

0

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

var string = 'ax(341);ay(20);az(3131);'; 
var pattern = /([0-9]{1,})/g; 

var result = string.match(pattern); 
console.log(result); 
// ["341", "20", "3131"] 

http://regex101.com/r/zE9pS7/1

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