[英]Regex remove special characters in filename except extension
我需要從擴展名中刪除文件名中的任何特殊字符。
我正在使用javascript filename.replace(regex, '-');
原始文件名: manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg
目標文件名: manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-.jpg
有了這個,我得到了塊中任何特殊字符,正是我所需要的,但是需要跳過文件名的擴展名:
/[^\\w\\d]+/g
結果: manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-jpg
有了這個,我刪除了除了文件名以外的任何特殊字符,還保留了文件名中的所有點:
[^\\d\\w\\_\\-\\.]+
結果: manuel-fernandex-Index-Prot.bla.otype-5-pepito-grillo.jpg
我非常接近,但我找不到最終的解決方案。
您可以使用[^\\w.]
除去單詞和點字符以外的所有字符,並在字符串末尾刪除不帶1+非點字符的點。
filename = filename.replace(/(?:\.(?![^.]+$)|[^\w.])+/g, "-");
細節
(?:
-非捕獲組的開始:
\\.(?![^.]+$)
-字符串末尾沒有后跟1+個非點字符的任何點 |
- 要么 [^\\w.]
-除單詞char和點字符外的任何char )+
-組結束,重復1次或更多次。 另一個解決方案( 如果始終存在擴展名 ):拆分擴展名,在第一個塊上運行更簡單的正則表達式,然后重新加入:
var filename = "manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg"; var ext = filename.substr(filename.lastIndexOf('.') + 1); var name = filename.substr(0, filename.lastIndexOf('.')); console.log(name.replace(/\\W+/g, "-") + "." + ext);
注意您的/[^\\w\\d]+/g
和/\\W+/g
等於\\w
包括\\d
。
或者,如果擴展名是可選的,請用最后一個點分隔,替換為先前的解決方案,然后重新加入:
var filename = "manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg"; var parts = filename.split(/\\.(?=[^.]*$)/); parts[0] = parts[0].replace(/\\W+/g, "-"); console.log(parts.join("."));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.