with 语法

在代码中,要执行这么一个函数
function computeExpression(exp, scope) {
try {
with (scope) {
return eval(exp);
}
} catch (e) {
console.error('ERROR', e);
}
}
要求在scope 作用域中执行,什么意思???
比如
scope = {a:10,b:5};
exp = a*b;
要求计算结果为15,这种情况,常规情况下要使用 with语法。
但是:
js的解释器需要检查with块中的变量是否属于with包含的对象,这将使with语句执行速度大大下降,并且导致js语句很难被优化。
在严格模式中,with语法是被禁用的。
而我使用ES6语法来编写这个库的,默认启用了严格模式了。所以不得已,自己模拟了一个with 的语法。
先看代码
function replaceWith(scopeName, exp) {
exp = " " + exp.trim();
let quickRegex = /([\s\+\-\*\/%&\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;
exp = exp.replace(quickRegex, (a, b, c) => {
return b + scopeName + '.' + c;
});
return exp;
}
首先把首位的空格全部去掉,为了和后面的统一,在开头加上一个空格。
第一个正则匹配出犹如"t.e==0 ? f : d"的表达式中的变量会被作为c提取出来,符号作为 b提取出来。
测试一下
现在已经可以返回一个表达式了,改装一下,让表达式直接在里面执行
function replaceWith(scope, exp) {
exp = " " + exp.trim();
let quickRegex = /([\s\+\-\*\/%&\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;
exp = exp.replace(quickRegex, (a, b, c) => {
return b + 'scope.' + c;
});
let func = new Function("scope", "return " + exp);
return func(scope);
}
测试一下
大功告成。
可能中间正则写的不好,还有其他不严密的地方,欢迎园友补充。
String 原型上的正则方法
好久都没怎么写过大量代码了,看到 Sring.prototype.split(//); 这个正则表达式,竟然把分割符号都给加到数组中了,很惊讶,在MDN上学了一下。顺便做个整理,算是补充吧。
String.prototype.split(separator,[limit])
separator:指定用来分割字符串的字符(串)。separator 可以是一个字符串或正则表达式。 如果忽略 separator,则返回整个字符串的数组形式。如果 separator 是一个空字符串,则 str 将会把原字符串中每个字符的数组形式返回。
limit一个整数,限定返回的分割片段数量。split 方法仍然分割每一个匹配的 separator,但是返回的数组只会截取最多 limit 个元素。
当找到一个 seperator 时,separator 会从字符串中被移除,返回存进一个数组当中的子字符串。如果忽略 separator 参数,则返回的数组包含一个元素,该元素是原字符串。如果 separator 是一个空字符串,则 str 将被转换为由字符串中字符组成的一个数组。
注意:
Note: 当字符串为空时,split 返回一个包含一个空字符串的数组,而不是一个空数组。
如果 separator 是一个正则表达式,且包含捕获括号(capturing parentheses),则每次匹配到 separator 时,捕获括号匹配的结果将会插入到返回的数组中。
var myString = "hello world"; var splits = myString.split((); console.log(splits);
输出
["hello world"]
var myString = "Hello 1 word. Sentence number 2."; var splits = myString.split(/(\d)/); console.log(splits);
输出
Hello ,1, word. Sentence number ,2,.
String.prototype.replace()
这个方法开始已经用到,就不再介绍。
String.prototype.match(Regex)
当字符串匹配到正则表达式(regular expression)时,match() 方法会提取匹配项。
如果正则表达式没有 g 标志,返回和 RegExp.exec(str) 相同的结果。而且返回的数组拥有一个额外的 input 属性,该属性包含原始字符串。另外,还拥有一个 index 属性,该属性表示匹配结果在原字符串中的索引(以0开始)。
"1aef2af3ef4 5".match(/[a-z]*(\d)/)
输出
["1", "1"]
如果正则表达式包含 g 标志,则该方法返回一个包含所有匹配结果的数组。如果没有匹配到,则返回 null。
注意,如果加g, 则分组无用
"1aef2af3ef4 5".match(/[a-z]*(\d)/g)
输出
["1", "aef2", "af3", "ef4", "5"]
String.prototype.search(Regex)
search() 方法执行一个查找,看该字符串对象与一个正则表达式是否匹配。
如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1。
类似于正则表达式的 test 方法 。
"aeg56".search(/[a-z]\d+/)
输出
2
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# js
# string
# 正则表达式
# with
# 替代方法
# 正则
# 深入浅析javascript函数中with
# 浅谈js中startsWith 函数不能在任何浏览器兼容的问题
# javascript之with的使用(阿里云、淘宝使用代码分析)
# 理解javascript中的with关键字
# Javascript中实现String.startsWith和endsWith方法
# javascript中with()方法的语法格式及使用
# javascript自定义startWith()和endWith()的两种方法
# Vue js with语句原理及用法解析
# 是一个
# 空字符串
# 测试一下
# 第一个
# 首次
# 很难
# 将会
# 最多
# 都没
# 而不
# 只会
# 而我
# 如果没有
# 将被
# 大功告成
# 做个
# 这种情况
# 中了
# 在里面
相关文章:
如何在阿里云虚拟主机上快速搭建个人网站?
如何快速辨别茅台真假?关键步骤解析
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
如何选择建站程序?包含哪些必备功能与类型?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站主机SSH密钥生成步骤及常见问题解答?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何配置IIS站点权限与局域网访问?
如何生成腾讯云建站专用兑换码?
如何快速重置建站主机并恢复默认配置?
c# 在ASP.NET Core中管理和取消后台任务
建站之星如何保障用户数据免受黑客入侵?
如何选择高效便捷的WAP商城建站系统?
临沂网站制作公司有哪些,临沂第四中学官网?
,网页ppt怎么弄成自己的ppt?
制作网站外包平台,自动化接单网站有哪些?
如何高效配置IIS服务器搭建网站?
宝塔新建站点报错如何解决?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
微信推文制作网站有哪些,怎么做微信推文,急?
如何撰写建站申请书?关键要点有哪些?
C#如何在一个XML文件中查找并替换文本内容
h5网站制作工具有哪些,h5页面制作工具有哪些?
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何快速搭建个人网站并优化SEO?
如何在腾讯云免费申请建站?
如何快速搭建自助建站会员专属系统?
网站网页制作专业公司,怎样制作自己的网页?
利用JavaScript实现拖拽改变元素大小
如何用y主机助手快速搭建网站?
如何挑选高效建站主机与优质域名?
常州自助建站工具推荐:低成本搭建与模板选择技巧
,石家庄四十八中学官网?
如何通过二级域名建站提升品牌影响力?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Python路径拼接规范_跨平台处理说明【指导】
如何使用Golang安装API文档生成工具_快速生成接口文档
定制建站模板如何实现SEO优化与智能系统配置?18字教程
网站好制作吗知乎,网站开发好学吗?有什么技巧?
学校为何禁止电信移动建设网站?
高端企业智能建站程序:SEO优化与响应式模板定制开发
建站之星安装提示数据库无法连接如何解决?
如何快速搭建高效WAP手机网站?
制作电商网页,电商供应链怎么做?
如何通过VPS搭建网站快速盈利?
成都网站制作报价公司,成都工业用气开户费用?
建站主机选哪种环境更利于SEO优化?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
*请认真填写需求信息,我们会在24小时内与您取得联系。