簡體   English   中英

如何在JavaScript中使用正則表達式用空字符串替換一組字符?

[英]How to use Regular expression in JavaScript to replace a set of characters with an empty string?

有人可以幫我寫一個正則表達式用空字符串替換這些字符嗎? 字符列表如下。

public static char[] delimiters = { ' ', '\r', '\n', '?', '!', ';', '.', ',', '`', ':', '(', ')', '{', '}', '[', ']', '|', '\'', '\\', '~', '=', '@', '>', '<', '&', '%', '-', '/', '#' };
var in = "...";
var out = in.replace(/[ \r\n?!:;\-(){}\[\]\\'"=@><&%\/#]+/g, '');

我可能錯過了幾個角色。

一種替代解決方案可能是采用白名單而非黑名單方法:

var out = in.replace(/[^\w]+/g, '');

這將刪除所有不是單詞字符的內容,即字母(大寫或小寫),數字或下划線。

嘗試這個:

var delimiters = [' ', '\r', '\n', '?', '!', ';', '.', ',', '`', ':', '(', ')', '{', '}', '[', ']', '|', '\'', '\\', '~', '=', '@', '>', '<', '&', '%', '-', '/', '#'],
    re = new RegExp("[" + delimiters.join("").replace(/[-\\\]]/g, "\\$&") + "]", "g");
str = str.replace(re, "");

在您的情況下,我將編寫一個函數,以轉義在regexp中可能具有特殊含義的任何字符,應用regexp並返回結果:

String.prototype.exclude = function(blacklist) {
    for(var i=0; i<blacklist.length; i++) {
        if(blacklist[i].match(/\W/)) {
            blacklist[i] = '\\'+blacklist[i];
        }
    }
    return this.replace(new RegExp('['+blacklist.join('')+']', 'g'), '');
};

var myString = "j a\nv\ra?s!c;r.i,p`t:I(s)A{w}e[s]o|m'e\\~=@><&%-/#"; 

myString.exclude([' ', '\r', '\n', '?', '!', ';', '.', ',', '`', ':', '(', ')', '{', '}', '[', ']', '|', '\'', '\\', '~', '=', '@', '>', '<', '&', '%', '-', '/', '#']);

// returns "JavascriptIsAwesome" which is of course the correct answer

這是您想要的正則表達式:

var re = /[ \r\n?!;.,`:(){}\[\]\|\'\\~=@><&%-\/#]/g;

例如:

var test = "j a\nv\ra?s!c;r.i,p`t:I(s)A{w}e[s]o|m'e\\~=@><&%-/#";
test.replace(re, '')

>>> "javascriptIsAwesome"

僅供參考,正則表達式中此類事物的通用符號為“ /[...]/”-表示“匹配括號內的任何字符”

這可能太激進了。

/[^A-z0-9]/g

暫無
暫無

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

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