Массив шаблонов регулярных выражений Javascript с циклом - PullRequest
0 голосов
/ 24 июля 2011

Я попытался создать функцию, которая заменит несколько значений регулярного выражения из массива. Это работает, если массив не содержит кавычек любого рода, это проблематично, когда я хочу использовать запятую в моем шаблоне. Поэтому я безуспешно пытался найти альтернативный способ подачи паттерна. Есть идеи?

function removeCharacters(str){
    //ucpa = unwanted character pattern array
    //var ucpa = [/{/g,/}/g,/--/g,/---/g,/-/g,/^.\s/];
    var ucpa = ["/{/","/}/","/--/","/---/","/-/","/^.\s/","/^,\s/"];
    for (var i = 0; i < ucpa.length; i++){ 
        //does not work
        var pattern = new RegExp(ucpa[i],"g");
        var str = str.replace(pattern, " ");
    }
    return str;
}

РАБОЧАЯ:

function removeCharacters(str){
    //ucpa = unwanted character pattern array
    var ucpa = [/{/g,/}/g,/--/g,/---/g,/-/g,/^.\s/,/^,\s/];
    for (var i = 0; i < ucpa.length; i++){
        var str = str.replace(ucpa[i], " ");
    }
    return str;
}

доработан:

function removeCharacters(str){
    var pattern = /[{}]|-{1,3}|^[.,]\s/g;
    str = str.replace(pattern, " ");
    return str;
}

Ответы [ 2 ]

5 голосов
/ 24 июля 2011

Конструктор RegExp принимает необработанные выражения, не заключенные в символы /. Поэтому все ваши регулярные выражения содержат по два / с, что не то, что вы хотите.

Вместо этого вы должны создать массив фактических литералов регулярных выражений:

var ucpa = [ /.../g, /",\/.../g, ... ];
3 голосов
/ 24 июля 2011

Вы также можете заключить все это в одно регулярное выражение:

var str = str.replace(/[{}]|-{1,3}|^[.,]\s/g, " ")

, хотя я не уверен, что это именно то, что вы хотите, так как некоторые из ваших регулярных выражений бессмысленны, например, ,^\s никогда не сможетматч.

...