正则表达式删除重音符号、特殊字符,但保留破折号、下划线和扩展名

all*_*dio 6 javascript regex

我正在尝试删除重音符号和除破折号(-)、下划线(_)之外的特殊字符并保留扩展名。

\n

例如:

\n

\xc3\x81\xc3\x89\xc3\x8d\xc3\x93\xc3\x9a\xc3\xa1\xc3\xa9\xc3\xad\xc3\xb3\xc3\xba\xc3\xa2\xc3\xaa\xc3\xae\xc3\xb4\xc3\xbb\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9\xc3\x87\xc3\xa3\xc3\xa7.,~!@#$%&_-12345.png

\n

到:

\n

AEIOUaeiouaeiouaeiouCac_-12345.png

\n

我得出了这个结果,但问题是它忽略了所有点。我只需要忽略最后一个出现的地方以保留文件名的扩展名。

\n
"\xc3\x81\xc3\x89\xc3\x8d\xc3\x93\xc3\x9a\xc3\xa1\xc3\xa9\xc3\xad\xc3\xb3\xc3\xba\xc3\xa2\xc3\xaa\xc3\xae\xc3\xb4\xc3\xbb\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9\xc3\x87\xc3\xa3\xc3\xa7.,\\~!@#$%&_-12345.png".normalize(\'NFD\').replace(/\\[^a-zA-Z0-9-_\\]/g, "")\n
Run Code Online (Sandbox Code Playgroud)\n

我已经尝试过像这样的负面观察:

\n
/[^a-zA-Z0-9-]+(?<!\\.)/g\n
Run Code Online (Sandbox Code Playgroud)\n

使用这个参考,但我没有成功。

\n
"\xc3\x81\xc3\x89\xc3\x8d\xc3\x93\xc3\x9a\xc3\xa1\xc3\xa9\xc3\xad\xc3\xb3\xc3\xba\xc3\xa2\xc3\xaa\xc3\xae\xc3\xb4\xc3\xbb\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9\xc3\x87\xc3\xa3\xc3\xa7.,~!@#$%&-12.34.5.png".normalize(\'NFD\').replace(/[^a-zA-Z0-9-]+(?<!\\.)/g, \'\')\n
Run Code Online (Sandbox Code Playgroud)\n

如果在这种情况下我有多个点,它只会删除第一个..

\n

zer*_*0ne 2

排除任何的负前瞻.后跟任何字母或数字(而后跟非单词字符)的负前瞻是可行的。

\n
/[^a-zA-Z0-9-._]|\\.(?![a-zA-Z0-9]+\\b)/g\n
Run Code Online (Sandbox Code Playgroud)\n

替代方案[^a-zA-Z0-9-._][^\\w.-].

\n

正则表达式101

\n

解释

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
部分描述
[^a-zA-Z0-9-._]
排除任何字母、数字、连字符、下划线和点
|
或者
\\.(?![a-zA-Z0-9]+\\b)
排除任何后面跟一个或多个字母和/或数字和非单词字符的点
\n
\n

例子

\n

\r\n
\r\n
/[^a-zA-Z0-9-._]|\\.(?![a-zA-Z0-9]+\\b)/g\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n