Извлечение массива целых чисел с помощью регулярного выражения в JavaScript - PullRequest
1 голос
/ 19 июля 2010

У меня есть реальные трудности с этим, но я не эксперт по JavaScript.Все, что я хочу сделать, это получить массив всех совпадений в строке, которые соответствуют заданному regExp.RegExp это:

[0-9]+

т.е.Любое целое число.

Итак, если я передам строку "12 09: 8: 76 ::: 54 12", я должен получить

arr [0] = "12" arr [1] ="09" arr [2] = "8" arr [3] = "76" arr [4] = "54" arr [5] = "12"

Легко?Не для меня!Я мог бы сделать это в vb.net без проблем с regexp.matches (string) (что-то подобное в любом случае).Я думал, что метод JavaScript .exec также даст мне массив, однако он возвращает только первое совпадение.В чем дело?Код ...

function testIt(){
    splitOutSelection2("123:::45  0::12312 12:17"); 
}


function splitOutSelection2(sSelection){
    var regExp = new RegExp("[0-9]+","g");
    var arr = regExp.exec(sSelection);
}; 

Ответы [ 6 ]

3 голосов
/ 19 июля 2010
arr = sSelection.match(/[0-9]+/g);

должен сделать.

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

1 голос
/ 19 июля 2010

Согласно документу, exec возвращает первое совпадение. Вы должны использовать матч вместо.

var arr = sSelection.match(/[0-9]+/g);

или

var arr = sSelection.match(/\d+/g);
1 голос
/ 19 июля 2010

что-то вроде:

var arrMatch = "12 09:8:76:::54 12".match(/[0-9]+/g);
alert(arrMatch);

.match вернет массив, если установлено глобальное (и совпадения найдены, конечно). [0-9] + означает, что он будет искать не только однозначные числа, но также совпадать с 12, 09, 76.

0 голосов
/ 11 августа 2010
function splitOutSelection2(sSelection){
    return sSelection.split(/[^0-9]+/g);
};

Отрицание regExp и использование String # split.

0 голосов
/ 19 июля 2010

Все ответы работают, но я хотел сохранить свой объект regExp, а не указывать его во время использования.Так что просто меняя функцию на ...

function splitOutSelection2(sSelection){
    var regExp = new RegExp("[0-9]+","g");
    var arr = sSelection.match(regExp);
}; 

.. - это то, что я искал.Спасибо, что указали мне правильное направление, хотя всем, кто ответил.

0 голосов
/ 19 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...