簡體   English   中英

帶循環的Javascript正則表達式模式數組

[英]Javascript regex pattern array with loop

我試圖創建一個函數來替換數組中的多個正則表達式值。 如果數組不包含任何引號,則此方法有效,當我要在模式中使用逗號時,這會出現問題。 因此,我一直在嘗試尋找一種沒有運氣的替代方式。 有任何想法嗎?

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;
}

RegExp構造函數采用原始表達式,而不用/字符包裝。 因此,您所有的正則表達式都包含兩個/ s,這不是您想要的。

相反,您應該制作一個實際的正則表達式文字數組:

var ucpa = [ /.../g, /",\/.../g, ... ];

您還可以將所有內容包裝到單個正則表達式中:

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

盡管由於某些正則表達式是荒謬的,所以我不確定這是否正是您想要的,例如,^\\s永遠無法匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM