如何在函数声明字符串中匹配“obj.foo”
How do I match "obj.foo" in a function declaration string
>假设我有一个表示为字符串的函数表达式
"var someFunction = function (foo) { foo.bar = 'hello'; };"
如何在该字符串中安全地识别所有有效(就 js 语法而言)对 foo.bar 引用?
即避免出现类似 "catfoo.barbar"
我想用其他东西替换这些引用。
(肯定会有人问...是的,我正在使用 eval,是的,它在我的用例中是有意义的)
我正在寻找的最重要的事情是如何匹配有效的对象名称。如何匹配对象名称中所有有效字符的集合?它们甚至是什么?像áéíóú这样的字符显然是有效的字符,所以它比[0-9a-zA-Z_]
为了说明我真正想做什么。我有一个函数,在其中我正在注入带有属性的对象
function shader(src, dst, out) {
out.a = (src.a + dst.a)/2;
}
这将为 2D 画布上的每个像素调用。我想做的是内联这个函数,并以合理的方式删除所有点运算符。
...
var src = {}, dst = {}, out = {};
...
for (i = 0; i < len; i += 4) {
shader(src, dst, out);
}
内联后着色器变为
...
var src = {}, dst = {}, out = {};
...
for (i = 0; i < len; i += 4) {
out.a = (src.a + dst.a)/2;
}
但我也想删除点运算符。我真的不确定性能提升会是什么,这可能是无用的微优化。内联该函数至少会使 FF 的性能提高 100%。我很好奇无论如何该怎么做。原始函数的存在是为了回退和易于定义。
这是一个用javascript编写的javascript解析器: https://github.com/douglascrockford/JSLint/blob/master/jslint.js
它将生成一个漂亮的解析树。祝你好运。
以下正则表达式:
/(?=[{'s])foo.bar(?=['s])/
使用 string.replace,如下所示:
var replaced = original.replace(/(?=[{'s])foo.bar(?=['s=])/g, "replacement");
方括号['s{]
之间的第一组在单词 foo 之前查找 { 或空格字符(空格、制表符等)。第二组['s=]
查找空格字符或条形后的等号。如果您发现还有其他可能性,您可以更改它。 (?=...)
匹配字符串,但不将其包含在匹配项中。这意味着找到空格字符或大括号或等号,但不包括在匹配项中,因此不会替换。
最后/g
意味着找到所有匹配项。如果你知道只有一个,你可以省略它。
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- Three.JS OBJ模型未显示
- if(foo!==null)的计算结果为true,即使foo为null
- ThreeJS访问加载的obj模型中的对象
- 无法在obj+mtl文件中加载纹理
- 渲染<选项值=“;foo”;选择>在服务器上
- Php variable obj to js
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- JSTree's data.rslt.obj.text()返回一个文本数组,而不是所需节点的文本
- 为什么“foo()”在这里有效
- 如何将Three.js场景中的几何体导出为已修改的OBJ
- 用Div内容创建obj
- Three.js.obj阴影不起作用
- 将.obj转换为.js文件
- Template.foo.renderd适用于所有'foo'
- 调用 foo() 后的 x 和 y 值是什么
- JS:将字符串“foo[bar]”转换为代码 obj.foo.bar 的简单方法
- obj.foo() 和 obj(a).foo - 如何做到这一点的解决方案?(jQuery的想法)
- 如何在函数声明字符串中匹配“obj.foo”
- 在JavaScript中;obj”;但事实并非如此;t具有名为“;foo”;能够使用obj[“foo”]给出一个值