除了扩展名,我需要从文件名中删除任何特殊字符。
我正在使用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
我非常接近,但我找不到最终的解决方案。
答案 0 :(得分:1)
您可以使用diff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-visitor.c
index 101fb27..fd5e67b 100644
--- a/tests/test-string-output-visitor.c
+++ b/tests/test-string-output-visitor.c
@@ -248,39 +248,39 @@ int main(int argc, char **argv)
output_visitor_test_add("/string-visitor/output/int",
&out_visitor_data, test_visitor_out_int, false);
- output_visitor_test_add("/string-visitor/output/int",
+ output_visitor_test_add("/string-visitor/output/int-human",
&out_visitor_data, test_visitor_out_int, true);
output_visitor_test_add("/string-visitor/output/bool",
&out_visitor_data, test_visitor_out_bool, false);
- output_visitor_test_add("/string-visitor/output/bool",
+ output_visitor_test_add("/string-visitor/output/bool-human",
&out_visitor_data, test_visitor_out_bool, true);
output_visitor_test_add("/string-visitor/output/number",
&out_visitor_data, test_visitor_out_number, false);
- output_visitor_test_add("/string-visitor/output/number",
+ output_visitor_test_add("/string-visitor/output/number-human",
&out_visitor_data, test_visitor_out_number, true);
output_visitor_test_add("/string-visitor/output/string",
&out_visitor_data, test_visitor_out_string, false);
- output_visitor_test_add("/string-visitor/output/string",
+ output_visitor_test_add("/string-visitor/output/string-human",
&out_visitor_data, test_visitor_out_string, true);
output_visitor_test_add("/string-visitor/output/no-string",
&out_visitor_data, test_visitor_out_no_string,
false);
- output_visitor_test_add("/string-visitor/output/no-string",
+ output_visitor_test_add("/string-visitor/output/no-string-human",
&out_visitor_data, test_visitor_out_no_string,
true);
output_visitor_test_add("/string-visitor/output/enum",
&out_visitor_data, test_visitor_out_enum, false);
- output_visitor_test_add("/string-visitor/output/enum",
+ output_visitor_test_add("/string-visitor/output/enum-human",
&out_visitor_data, test_visitor_out_enum, true);
output_visitor_test_add("/string-visitor/output/enum-errors",
&out_visitor_data, test_visitor_out_enum_errors,
false);
- output_visitor_test_add("/string-visitor/output/enum-errors",
+ output_visitor_test_add("/string-visitor/output/enum-errors-human",
&out_visitor_data, test_visitor_out_enum_errors,
true);
output_visitor_test_add("/string-visitor/output/intList",
&out_visitor_data, test_visitor_out_intList, false);
- output_visitor_test_add("/string-visitor/output/intList",
+ output_visitor_test_add("/string-visitor/output/intList-human",
&out_visitor_data, test_visitor_out_intList, true);
g_test_run();
除去单词和点字符以外的所有字符,并在字符串末尾删除不带1+个非点字符的点。
[^\w.]
请参见regex demo
详细信息
filename = filename.replace(/(?:\.(?![^.]+$)|[^\w.])+/g, "-");
-一个非捕获组的开始:
(?:
-字符串末尾没有后跟1+个非点字符的任何点\.(?![^.]+$)
-或|
-除单词char和点字符外的任何char [^\w.]
-组结束,重复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