防止替换 JavaScript 正则表达式中的转义序列
Prevent Replacing Escaped Sequence in JavaScript Regular Expressions
JSFiddler: http://jsfiddle.net/A3vg6/20/
var regex = /(?:window|scope|data|owner)(?:'.[a-zA-Z_][a-zA-Z_0-9]*)*/gi;
var path = [];
var vars = [];
var ms = txt.replace(regex,
function (match) {
var nv = "v" + (path.length + 1);
if (match.indexOf("owner.")==0) {
match = match.substr(6);
}
path.push(match);
vars.push(nv);
return nv;
}
);
我正在获得输出
data.x + data.y + $data.z + xdata => v1 + v2 + $v3 + xv4
但正确的输出应该是,
data.x + data.y + $data.z + xdata => v1 + v2 + data.z + xdata
因此,任何以 $ 开头的内容都应该被转义,如果数据出现在任何字符之后都不应该被替换。只有 4 个关键字,窗口、范围、数据和所有者,这些词需要用变量替换。
我讨厌正则表达式,但这必须是正则表达式,因为它将包含复杂的序列,例如。
data[ Calculate( x, data.y)] => v1[ Calculate(x,v2)]
我们现在收效甚微,但我对新序列有问题
data[data['x']] + data.x + data.y + $data.y + xdata
成为
v1v2['x']] +v3 +v4 + data.y + xdata
但它应该是
v1[v2['x']] +v3 +v4 + data.y + xdata
回答:
http://jsfiddle.net/A3vg6/44/
工作正常。
试试这个正则表达式:
/(^|[^'w])(?:window|scope|data|owner)(?:'.[a-zA-Z_][a-zA-Z_0-9]*)*/gi
并将函数更改为:
var ms = txt.replace(regex,
function (match, prefix) {
if (prefix == "$") return match.substr(1);
var nv = "v" + (path.length + 1);
match = match.substr(1);
if (match.indexOf("owner.")==0) {
match = match.substr(6);
}
path.push(match);
vars.push(nv);
return prefix + nv;
}
);
在这里尝试: http://jsfiddle.net/A3vg6/40/
相关文章:
- 包含转义符号的正则表达式
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- Javascript 正则表达式替换为转义的反斜杠
- Javascript中的正则表达式问题转义特殊字符
- 正则表达式不匹配序列中的两个相同字符
- 如何转义 JavaScript 正则表达式替换字符
- 转义字符串中的“+”加号,以便在 coffeescript/javascript 中的正则表达式中使用
- 正确的正则表达式来查找和替换转义的 UTF-8 字符串
- 在javascripot正则表达式中转义元字符
- 正则表达式转义空格和特殊字符
- JS 编译器删除正则表达式中的转义 () 字符
- 防止替换 JavaScript 正则表达式中的转义序列
- 我什么时候需要转义正则表达式字符集中的字符(在 [] 内)
- 如何在从 javascript 中的 json 对象中提取字符串时保留转义序列.(字符串实际上是正则表达式模式)
- 正在为javascript转义.NET正则表达式模式
- 带有x转义序列的JS正则表达式在Firefox中不起作用
- 正在转义Mongodb正则表达式中的特殊字符
- 在c#中构建(转义)JavaScript正则表达式
- 如何转义这个正则表达式中的变量?
- 用于转义Java正则表达式字符串的JavaScript函数