Удалите дубликаты запятых и лишние запятые в начале / конце с помощью RegExp в Javascript и удалите дубликаты чисел? - PullRequest
0 голосов
/ 01 апреля 2012

Предположим, у нас есть строка, подобная следующей:

,34,23,4,5,634,23,12,5,4,3,1234,23,54,,,,,,,123,43,2,3,4,5,3424,,,,,,,,123,,,1234,,,,,,,45,,,56

Как мы можем преобразовать ее в следующую строку с помощью RegExp в Javascript?

34,23,4,5,634,12,3,1234,54,123,43,2,3424,45,56

На самом деле, я хочу удалить повторэлементы и первый и последний , символ

Ответы [ 3 ]

4 голосов
/ 01 апреля 2012

[отредактировано] Чтобы превратить их в набор уникальных чисел, как вы на самом деле просите, сделайте следующее:

function scrapeNumbers(string) {
    var seen = {};
    var results = [];
    string.match(/\d+/g).forEach(function(x) {
        if (seen[x]===undefined)
            results.push(parseInt(x));
        seen[x] = true;
    });
    return results;
}

Демо-версия:

> scrapeNumbers(',1,22,333,22,,333,4,,,')
[1, 22, 333, 4]

Если бы у вас был Array.prototype.unique() примитив, вы могли бы написать его так в одну строку:

yourString.match(/\d+/g).map(parseBase10).unique()

К сожалению, вам нужно быть немного многословным и определить свой собственный parseBase10 = function(n){return parseInt(n)} из-за этой нелепой ошибки, которую трудно отследить: javascript - Array # map и parseInt

1 голос
/ 01 апреля 2012

Нет необходимости в регулярных выражениях. Несколько трюков

text = ',34,23,4,5,634,23,12,5,4,3,1234,23,54,,,,,,,123,43,2,3,4,5,3424,,,,,,,,123,,,1234,,,,,,,45,,,56';
text = text.replace(/,+/g, ','); //replace two commas with one comma
text = text.replace(/^\s+|\s+$/g,''); //remove the spaces
textarray = text.split(","); // change them into array
textarray = textarray.filter(function(e){ return e.length});
console.log(textarray);                                       


// Now use a function to make the array unique
Array.prototype.unique = function(){
   var u = {}, a = [];
   for(var i = 0, l = this.length; i < l; ++i){
      if(this[i] in u)
         continue;
      a.push(this[i]);
      u[this[i]] = 1;
   }
   return a;
}

textarray = textarray.unique();
text = textarray.join(','); //combine them back to what you want
console.log(text);

Демо

Если вы знакомы с jQuery

text = text.replace(/,+/g, ',');
text = $.trim(text);
text = $.unique(text.split(",")).filter(function(e){ return e.length}).join(",");
console.log(text);

Демо

0 голосов
/ 01 апреля 2012

Это будет сделано:

function arrIndex(fnd, arr) {
    for (var len = arr.length, i = 0; i < len; i++) {
        if (i in arr && arr[i] === fnd) {
            return i;
        }
    }
    return -1;
}

function scrapeNumbers(str) {
    var arr = str.replace(/,+/g, ",").replace(/^,/, "").replace(/,$/, "").split(",");

    for (var i = 0, len = arr.length, rtn = []; i < len; i++) {
        if (i in arr && arrIndex(arr[i], rtn) == -1) {
            rtn.push(arr[i]);
        }
    }
    return rtn.join(",");
}

var str = ",,34,23,4,5,634,23,12,5,4,3,1234,23,54,,,,,,,123,43,2,3,4,5,3424,,,,,,,,123,,,1234,,,,,,,45,,,56,,";

alert(scrapeNumbers(str));

Вот jsFiddle

Примечание: Я создал пользовательскую array.indexOf функцию дляулучшенная поддержка браузера

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