AS3中正则表达式对反斜杠的替换
原文地址:https://blog.zengrong.net/post/1374.html
AS3中正则表达式对反斜杠的替换
一个有趣的小问题,下面的正则表达式能替换成功么?
1var __str:String = '1234\6789';
2trace(__str.replace(/\\/g, '5'));
答案是:不能。trace出来的结果为:
[trace] 12346789
其实正则本身并没有写错,错在被替换的字符串。反斜杠 “\” 在AS3中是转义符,会将其后的任何值转换为本身,因此看到的字符串其实本身就是 12346789
,也就是没有反斜杠,当然无法搜索到。
直接 trace(__str)
,结果和上面的trace相同。
希望得到正确的结果,需要将字符串设置为: 1234\\6789
,我们看到的是 两个 反斜杠,而AS3认为它是 一个 反斜杠。
如果使用RegExp来建立正则,则需要使用4个反斜杠:
1var __str:String = '1234\\6789';
2var __reg:RegExp = new RegExp('\\\\', '');
3trace(__str.replace(__reg, '5'));
这种情况只在硬编码字符串的时候出现,而如果字符串出现在 TextField中,从 TextField.text 中取出的字符串,本身就自动进行了转义,看到的 一个 反斜杠,其实是 两个 反斜杠。
- 文章ID:1374
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/backslash_in_regexp/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。