我试图删除重音符号和特殊字符,除了破折号(-),下划线(_),并保留字符串的扩展名,例如:ÁÉÍÓÚáéíóúâêîôûàèìòùÇãç.,~!@#$%&_-12345.png
致:AEIOUaeiouaeiouaeiouCac_-12345.png
我得到了这个结果,但问题是它忽略了所有的点。我只需要忽略最后一次出现的点来保留文件名的扩展名。
“
我已经试过像这样的消极的向后看:
/[^a-zA-Z0-9-]+(?<!\.)/g
我用了reference,但没有成功。
"ÁÉÍÓÚáéíóúâêîôûàèìòùÇãç.,~!@#$%&-12.34.5.png".normalize('NFD').replace(/[^a-zA-Z0-9-]+(?<!\.)/g, '')
如果我有多个点在这种情况下,它只删除第一个.
3条答案
按热度按时间6l7fqoea1#
1.开始,我们使用normalize()函数和NFD参数将所有内容还原为基本形式。
1.结合replace()和正则表达式/[\u0300-\u036f]/g,我们可以删除重音符号和字符,如反引号和变音符号
1.最后,我们注意在一组其他正则表达式中使用replace来获得我们要查找的字符串的格式
9q78igpj2#
不要检查每个字符是否是文件扩展名,而是一次选择整个扩展名
(
(?<name>blah)
只是一个命名的(blah)
组,它的命名只是为了解释)6kkfgxo03#
您可以使用lookahead来测试 * 不是最后一个点 ,以检查前面是否会有另一个点。为了保留下划线,还可以使用
\w
( 单词字符 *),这是[A-Za-z0-9_]
的short。See this demo at regex101
点也需要放在交替中的否定左边,让右边触发。