JS 编译器删除正则表达式中的转义 () 字符
JS Compiler deleting escape () characters in regular expressions
我最近一直在努力解决一个关于在 ant 构建任务的压缩/最小化阶段编译 javascript 正则表达式的问题。
基本上,问题是每个javascript正则表达式,即:
var x = y.replace(/('d|'.)/g, '');
按如下方式删除和替换其转义字符:
var x = y.replace(/(d|.)/g, '');
随着项目进展迅速,并且由于构建阶段的此类问题,我的测试不断失败,这变得非常烦人。
这些是我尝试过的事情:
编译器工具:
- 谷歌闭包编译器
- YUI压缩机
形成正则表达式的不同方法:
// Same problem occurs when regex placed inside a string
var x = y.replace(new RegExp('(''d|''.)', 'g'), '');
从 Ant 中调用编译器/压缩器的不同方法:
<!-- Closure Compiler Ant Task -->
<taskdef name="jscomp" classname="com.google.javascript.jscomp.ant.CompileTask"
classpath="lib/compiler.jar"/>
<!-- Executable called from command line -->
<exec executable="java" dir=".">
<arg line="-jar lib/compiler.jar" />
<!-- other args -->
</exec>
从中运行 Ant 任务的不同操作系统:
- Mac OSX
- 视窗 7
- Unix
关于如何在这里进行的任何想法?
我发现闭包编译器和 YUI 压缩器都会遇到解析正则表达式的问题,这太巧合了,所以也许问题出在其他地方......
任何意见非常感谢。
更新
正如Chad在下面提到的,闭包编译器服务不会报告相同的问题,这意味着问题必须出在ANT(或底层控制台进程(处理输入/输出字符串的方式上。
目前完成此操作的方式是通过(google(编译器ant任务,通过使用SAME FILE作为进程的输入和输出(请注意,通过使用命令行调用发生了相同的问题(。
<!-- CLOSURE COMPILER MACRO -->
<!-- @see http://code.google.com/p/closure-compiler/wiki/BuildingWithAnt -->
<macrodef name="compile">
<attribute name="file" />
<sequential>
<echo>Compiling @{file}</echo>
<jscomp compilationLevel="simple" warning="quiet"
debug="false" output="@{file}">
<sources dir=".">
<file name="@{file}"/>
</sources>
</jscomp>
</sequential>
</macrodef>
<!-- ACTUAL USAGE -->
<compile file="${local.output.dir}/app.js" />
我无法在这里重现此问题:
http://closure-compiler.appspot.com/home
此代码:
// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print
// ==/ClosureCompiler==
y.replace(/('d|'.)/g, '');
编译为:
y.replace(/('d|'.)/g, "");
似乎还有其他东西正在更改您的代码,您是否对脚本进行任何预处理或后处理?
这个答案并没有解决构建过程中哪个工具导致恶作剧的一般谜团,但它确实处理了你想要匹配的特定正则表达式。 正如其他海报所指出的,.字符类中的 (点( 不需要转义。 所以
var x = y.replace(/('d|'.)/g, '');
可以在没有反斜杠的情况下重写为
var x = y.replace(/([0-9.])/g, '');
我认为在这种情况下您不需要括号来捕获,所以我们可以说
var x = y.replace(/[0-9.]/g, '');
相关文章:
- 在JavaScript中输出转义字符
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 带有Ajax请求的Javascript JSON.parse函数n〃;新行转义字符
- Php在csv输出文件中插入转义字符
- TinyMCE 3.x仅在IE中转义字符
- 如何使用Javascript为JSON转义字符
- 带有转义字符的Javascript子字符串
- 包括一个带有innerHTML转义字符的脚本
- 替换转义字符中的单个反斜杠
- innerhtml 忽略了 HTML 转义字符
- 如何从 JSON 字符串中删除转义字符
- 将带有转义字符和 ASCII 值的字符串转换为十六进制
- 动态向 jQuery 变量添加转义字符
- JavaScript 单引号和双引号中的转义字符
- JavaScript - 如何使用转义字符构建字符串
- Javascript JSON 返回带有未转义字符的错误
- 正则表达式用于解析带有转义字符的字符串
- AngularJS中$interpolate内字符串的转义字符是什么
- 灰尘.js转义字符
- HTML源字段还将HTML代码更改为转义字符