我需要从文件名中删除除扩展名之外的任何特殊字符。
\n\n我使用的是javascriptfilename.replace(regex, '-');
原始文件名:manuel fernandex \xe2\x80\x93 Index Prot.bla.otype 5 (pepito grillo).jpg
目标文件名:manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-.jpg
有了这个,我在块中得到了任何特殊字符,这正是我所需要的,但需要跳过文件名的扩展名:
\n\n/[^\\w\\d]+/g\n结果:manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-jpg
有了这个,我删除了除文件名之外的所有特殊字符,但也保留了文件名中的所有点:
\n\n[^\\d\\w\\_\\-\\.]+\n结果:manuel-fernandex-Index-Prot.bla.otype-5-pepito-grillo.jpg
我非常接近,但我找不到最终的解决方案。
\n您可以删除除单词和点字符之外的任何字符[^\\w.],以及在字符串末尾不跟随 1 个以上非点字符的任何点:
filename = filename.replace(/(?:\\.(?![^.]+$)|[^\\w.])+/g, "-");\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅正则表达式演示
\n\n细节
\n\n(?:- 非捕获组的开始:\n\n\\.(?![^.]+$)- 字符串末尾没有跟随 1 个以上非点字符的任何点|- 或者[^\\w.]- 除字字符和点字符之外的任何字符)+- 一组结束,重复1次或多次。另一个解决方案(如果扩展始终存在):拆分扩展,在第一个块上运行更简单的正则表达式,然后连接回来:
\n\nfilename = filename.replace(/(?:\\.(?![^.]+$)|[^\\w.])+/g, "-");\nRun Code Online (Sandbox Code Playgroud)\r\n请注意您的/[^\\w\\d]+/g和与include/\\W+/g相等。\\w\\d
或者,如果扩展是可选的,则用最后一个点分割,按照之前的解决方案进行替换,然后连接回来:
\n\nvar filename = "manuel fernandex \xe2\x80\x93 Index Prot.bla.otype 5 (pepito grillo).jpg";\r\nvar ext = filename.substr(filename.lastIndexOf(\'.\') + 1);\r\nvar name = filename.substr(0, filename.lastIndexOf(\'.\')); \r\nconsole.log(name.replace(/\\W+/g, "-") + "." + ext);Run Code Online (Sandbox Code Playgroud)\r\n| 归档时间: |
|
| 查看次数: |
3429 次 |
| 最近记录: |