我想使用JavaScript从字符串中删除除空格之外的所有特殊字符。

例如, 美国广播公司的测试#年代 应输出为 abc测试。


当前回答

const input = ' #if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) == '20-09-2019' # Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' # AdestraSID < hello@imimobile.co > # else_1 # Test27919 < alerts@imimobile.com > # endif_1 # '; const replaceString = input.split (' $ (') . join(“- >”).split (') ') . join(“< -”); console.log (replaceString.match (/(?<=->).*?(?=<-)/ g));

其他回答

你可以指定你想要删除的字符:

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

或者,要更改除数字和字母以外的所有字符,请尝试:

string = string.replace(/[^a-zA-Z0-9]/g, '');

搜索所有不(单词字符||空格):

str.replace(/[^\w ]/, '')

你想从字符串中删除谁的特殊字符,准备一个列表,然后使用javascript替换函数删除所有特殊字符。

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

或者你可以为整个字符串运行循环,并将单个单个字符与ASCII码进行比较,并重新生成一个新字符串。

const input = ' #if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) == '20-09-2019' # Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' # AdestraSID < hello@imimobile.co > # else_1 # Test27919 < alerts@imimobile.com > # endif_1 # '; const replaceString = input.split (' $ (') . join(“- >”).split (') ') . join(“< -”); console.log (replaceString.match (/(?<=->).*?(?=<-)/ g));

第一种解决方案不适用于任何UTF-8字母。(它将剪切诸如Привіт这样的文本)。我已经设法创建了一个不使用RegExp的函数,并在JavaScript引擎中使用了良好的UTF-8支持。原理很简单,如果一个符号的大写和小写相等,它就是一个特殊字符。唯一的例外是空格。

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

更新:请注意,此解决方案仅适用于有小写字母和大写字母的语言。在像中文这样的语言中,这行不通。

更新2:当我在进行模糊搜索时,我得到了最初的解决方案。如果您还试图删除特殊字符来实现搜索功能,还有更好的方法。使用任何音译库,它将只从拉丁字符生成字符串,然后简单的Regexp将执行删除特殊字符的所有魔法。(这对中国人也适用,你也会通过制作特罗姆瑟得到额外的好处)。