用于删除多语言字符串javascript上的特殊字符的正则表达式

用于删除多语言字符串javascript上的特殊字符的正则表达式,javascript,regex,Javascript,Regex,我在这里得出的答案是: 但这似乎是针对PHP的,我不擅长正则表达式,那么javascript等价物是什么呢 当我在示例答案中使用正则表达式时,我得到一个无效表达式错误,告诉我存在无效转义 search(event) { const length = (string) => { if (string.length > 1) { return true; } return false; };

我在这里得出的答案是:

但这似乎是针对PHP的,我不擅长正则表达式,那么javascript等价物是什么呢

当我在示例答案中使用正则表达式时,我得到一个无效表达式错误,告诉我存在无效转义

search(event) {
    const length = (string) => {
        if (string.length > 1) {
            return true;
        }
        return false;
    };
    const trim = (string) => {
        if (string.trim() !== '') {
            return true;
        }
        return false;
    };
    const keyType = (string) => {
        const regex = /\P{Xan}+/u;
        if (!regex.exec(string)) {
            return true;
        }
        return false;
    };
    const text = this.searchListParams.searchText;
    if (length(text) && trim(text) && keyType(text)) {
        this.searchSubject.next(this.searchListParams);
    } else {
        this.mediaListParams.startRow = 0;
        this.listSubject.next(this.mediaListParams);
    }
}

我不熟悉PHP语法,但在JavaScript中,花括号
{}
用作。这可能是导致您的错误的原因

也就是说,PHP正则表达式在JavaScript中的含义与在PHP中的含义不同。不幸的是,AFAIK没有预定义的字符类与您在JavaScript中提供的PHP正则表达式等价,因此我认为我无法提供正则表达式来显式解决您的问题


然而,中提出了一个在JS中不使用正则表达式的潜在创造性解决方案,但它只适用于基于拉丁语的字母表(带大写字母的语言)和单词字符(而不是数字)。以下是一个基本实现(根据链接答案修改):

函数删除特殊项(str){
var lower=str.toLowerCase();
var upper=str.toUpperCase();
var res=“”;

对于(var i=0;iPHP中的
/\p{Xan}+/u
模式匹配任何不是Unicode字母或数字的1+字符

如果您需要支持任何浏览器或JS实现,请使用
XRegExp
和匹配除Unicode字母(
\pL
)和数字(
\pN
)以外的任何1+字符的
[^\pL\pN]+
模式:

var rx=XRegExp(“[^\\pL\\pN]+”,“g”);
变量s=”8੦৪----Łąka!!!!аааааа,***,咖啡馆”;
var res=XRegExp.replace(s,rx“”)
console.log(“'+s+”,“=>”,“'+res+”);

您可以在JS中使用正则表达式。您可以显示您的代码吗?这应该是有效的JavaScript regexp语法。可能您使用不正确。@JonathanLam我添加到我的OP@SandraWillford哦,这个正则表达式和你之前的文章不同。关于你的其他代码的一个小评论-如果语句仅用于返回布尔值。您的代码可以压缩为:
const length=(string)=>string.length>1;
const trim=(string)=>string.trim()!='';
在大多数主要平台上,除了javascipt之外,卷曲括号用于量词和POSIX类,如
\p{…}
用于类或
\P{…}
用于否定classes@Bohemian这种语法也出现在JS中吗?我以前没有看到过,现在在MDN文档中也没有看到。在你回答添加javascript之前,我编辑了我的评论。看来JS不会来参加那个聚会。@Bohemian我看到你把我的答案转换成了评论(在我编辑它以包含潜在解决方案之前).我同时意识到,这是一个略显的回答,并没有为OP的需求提供一个完整的解决方案,但它至少回答了问题的一部分——为什么会发生错误——对吗?或者我应该更加小心地在将来完整地回答这个问题?你最初的回答没有回答OP的问题,这是错误的(引用)javascript等价物是什么?你的回答没有给出正则表达式OP可以使用的地方。这更像是对情况的一般性评论。即使现在你还没有回答OP的问题,而是写了代码,但我不忍心删除它。还有
console.log(XRegExp([^\\pL\\pN]+))
获取不需要
XRegExp
库的长正则表达式
search(event) {
    const length = (string) => {
        if (string.length > 1) {
            return true;
        }
        return false;
    };
    const trim = (string) => {
        if (string.trim() !== '') {
            return true;
        }
        return false;
    };
    const keyType = (string) => {
        const regex = /\P{Xan}+/u;
        if (!regex.exec(string)) {
            return true;
        }
        return false;
    };
    const text = this.searchListParams.searchText;
    if (length(text) && trim(text) && keyType(text)) {
        this.searchSubject.next(this.searchListParams);
    } else {
        this.mediaListParams.startRow = 0;
        this.listSubject.next(this.mediaListParams);
    }
}
function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {

        // test if character or numeric using capitalization test
        if(lower[i] != upper[i] || /\d/.exec(lower[i]))
            res += str[i];

    }
    return res;
}