Javascript - 正则表达式删除特殊字符但也保留希腊字符

tgo*_*gos 2 javascript regex replace symbols character

我正在尝试从一段文本中删除特殊字符,但使用以下正则表达式

\n\n
var desired = stringToReplace.replace(/[^\\w\\s]/gi, \'\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

(在这里找到:\n javascript regexp 删除所有特殊字符

\n\n

具有删除希腊字符的负面影响,这是我不想要的。

\n\n

有人还可以解释一下如何在正则表达式中使用字符范围吗?是否有字符映射表可以帮助我定义我想要的范围?

\n\n

回答:

\n\n
[a-zA-Z0-9\xce\x86\xce\x88-\xcf\x8e\\s]   # See my 2nd comment under Joeytje50\'s answer.\n
Run Code Online (Sandbox Code Playgroud)\n

Joe*_*e50 5

这些范围的定义方式基于其字符代码。因此,由于A具有 char code65zchar code 122,因此以下正则表达式:

\n\n
[A-z]\n
Run Code Online (Sandbox Code Playgroud)\n\n

会匹配每个字母,还会匹配每个字符代码介于这些字符代码之间的字符,即那些代码为 91 到 95 的字符,即字符[\\]^_。(演示)。

\n\n

现在,对于希腊字母,从 alpha 到 omega,大写字符的字符代码为 913-937,从 alpha 到 omega,小写字符的字符代码为 945-969(这包括 sigma 的两种小写变体,即\xcf\x82(962) 和\xcf\x83(963) ))。

\n\n

因此,要匹配除拉丁字母、希腊字母和阿拉伯数字之外的每个字符,您需要以下正则表达式:

\n\n
[a-zA-Z0-9\xce\xb1-\xcf\x89\xce\x91-\xce\xa9]\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,对于希腊字符,它的作用就像拉丁字母一样。

\n\n
\n\n

编辑:我已经通过 Google Translate'd Lipsum 对此进行了测试,看起来这并没有考虑重音字母。我检查了这些重音字母的字符代码是什么,结果发现它们被放置在小写字母之前或大写字母之后。因此,以下正则表达式适用于所有希腊字母,包括重音字母:

\n\n
[a-zA-Z0-9\xce\xac-\xcf\x89\xce\x91-\xcf\x8e]\n
Run Code Online (Sandbox Code Playgroud)\n\n

演示

\n\n

此扩展范围现在还包括\xce\xac\xce\xad\xce\xae\xce\xaf\xce\xb0(字符代码 940 到 944)和\xcf\x8a\xcf\x8b\xcf\x8c\xcf\x8d\xcf\x8e(代码 970 到 974)。

\n\n

\\s要还包含空格(空格、制表符、换行符),只需在范围中包含 a 即可:

\n\n
[a-zA-Z0-9\xce\xac-\xcf\x89\xce\x91-\xcf\x8e\\s]\n
Run Code Online (Sandbox Code Playgroud)\n\n

演示

\n\n
\n\n

编辑:显然,这个范围内需要包含更多希腊字母,即 range 中的字母[\xce\x86-\xce\xab],这是 之前的字母范围\xce\xac,因此新的正则表达式将如下所示:

\n\n
[a-zA-Z0-9\xce\x86-\xcf\x89\xce\x91-\xcf\x8e\\s]\n
Run Code Online (Sandbox Code Playgroud)\n\n

演示

\n