我在Windows机器上,我正在寻找一种方法来使用Regex来计算路径中File.separator字符的出现次数。下面是我的代码,每次输出0。
var dummyPath:String = "C:" + File.separator + "A" + File.separator + "B.jpg";
var pattern:RegExp = new RegExp(File.separator,"g");
trace(dummyPath.match(pattern).length);
//Outputs 0
我不确定还能做什么。
答案 0 :(得分:2)
我不会在这样的情况下使用正则表达式,只是因为它们比通常的字符串操作更加混乱(并且我认为效率低得多),而你并没有这样做这里的任何东西都很复杂,足以弥补差异。
在这种情况下,我会这样做:
var dummyPath:String = "C:" + File.separator + "A" + File.separator + "B.jpg";
trace(dummyPath.split(File.separator).length - 1);
至于您遇到的问题,请记住操作系统的文件分隔符通常是/
或\
。你说你在Windows上运行它。这意味着你将"\"
传递给正则表达式的构造函数。 \
用于在正则表达式中开始转义序列,就像在字符串中使用它一样。
所以基本上你没有描述在Windows机器上查找"\"
实例的正则表达式;你正在描述一个启动转义序列并且没有完成的正则表达式。因此,要在这种情况下使用正则表达式,您需要使用另一个\
转义\
:
// This is technically untested, but the principle is the same.
var pattern:RegExp = new RegExp(File.separator.replace("\\", "\\\\"), "g");
答案 1 :(得分:2)
它不匹配,因为您使用的文件分隔符是元字符
逃脱\
。
正则表达式引擎期望转义用作文字的元文件。
尝试\\
,这将是" \\\\"作为双引号字符串。
如果遇到正斜杠分隔符,也可以逃避它,不会造成伤害。
因此,将变量与转义连接为字符串Sep =" \\" + 9月;什么的。