Home

正则表达式模式与符号 patterns and flags

表达式(patterns) 声明正则表达式有两种方式: 通过斜杠的方式声明 let regexp = /regexp/gmi; 通过 new 语法声明 let regexp = new RegExp("pattern", "flags"); 上面两种方式创建的正则表达式效果都是一样的,它们都是内置 RexExp 的实例化。 这两种方式的主要区别是:使用斜杠的方式不允许插入表达式(例如模板字符串 {...})。 斜杠的方式比较常用,因为通常在写一个正则表达式时,就已经知道它的匹配规则了;但是如果需要动态创建一个正则表达式,则可以使用 new的方式,例如: let tag = prompt("输入你想查找的标签", "h2"); let regexp...

Read more

正则表达式 Lookahead、LookBehind

某些情况下,我们需要找在某些字符后面或前面的字符,在正则表达式中,他们叫做 “lookaroud”。 题目(下文有引用): 1 turkey costs 30€ lookahead Lookahead,即查找某个字符 A,但是字符 A 后紧跟着的其他字符必须匹配特定规则。 它的语法为: 它的意思是:查找 ```X```,但是他的后面必须**立即**跟随着 ```Y```,```X``` 和 ```Y``` 可以是任意字符。 使用 lookahead 来实现上面的题目的功能:找到在 € 字符前面的数字,也就是 30。 即查找某个以欧元结尾的数字,它的正则表达式为: ```\d+(?=€)``` **注意:**lookahead 仅仅是测试是否符合条件,不管是否符合条...

Read more

H5 中阻止浏览器前进后退手势

怎么阻止在 H5 浏览器中水平滑动页面时,页面后退或者前进? EN Android 端: 关键代码: <style> html { touch-action: none; } </style> 加入你的网页由滑块验证码的时候,当用户在滑动滑块进行验证时,如果没有阻止浏览器的水平方向滑动后退手势,那用户在操作的时候就会返回上一级页面。 要阻止这种情况只需禁用掉浏览器默认的手势就行了。 touch-action 的作用就是禁用掉这个效果,它的解释是: Determines whether touch input may trigger default behavior supplied by user agent. ...

Read more

逻辑赋值运算符

逻辑赋值运算符的作用是对逻辑运算符和赋值表达式的简写。 如果要判断一个变量是否为 false,如果为 false 则给它重新赋值,通常的写法为: function example(a) { if(!a) { a = 'foo'; } } 同样也可以简写为: function example(a) { a = a || 'foo'; } example(); 有了逻辑赋值运算符后,我们可以这样写: function example(a) { a ||= 'foo'; } example(); 逻辑赋值运算符可以搭配更多的逻辑运算符使用: a ||= "foo"; // a 为 false 时,foo 将会被赋值给 a。 (a = true 时...

Read more

给 Node.js 搭建的 Express 项目增加网页热更新功能

通过 Node.js 和 Express 搭建的后台项目,通过 Express 来渲染 HTML 模版,虽然后端可以通过 nodemon 来实现热更新,但是热更新后并不会直接反应到网页上,而是要刷新一遍,因为浏览器并没有热更新。 解决这个问题的办法就是通过 Live server 这个插件。 具体流程如下: 先在编辑器上安装这个插件,推荐使用 VS Code; 在浏览器上安装一个 Live Server 插件,Chrome 或 Firefox; 启动你的 Express 服务,并且能够正常访问项目; 打开你的浏览器插件,填写项目信息: 项目地址,即浏览器中项目的访问网址 Live Server 的地址,即 VS Code 中这个...

Read more

数字分隔符(Numeric separators)

通常一长串数字我们很难一眼就知道它是多大,通过数字分隔符连接一串数字,可以使数字变得更具有可读性。 1000000000 // 你能一眼看出这是一百亿吗? 这种情况下我们可以通过使用数字分隔符 _ 来使它变得更具可读性。 1_000_000_000_000 // 同样是一百亿 var fee = 123_00; // 12300 var fee = 12_300; // 12300 let budget = 1_000_000_000_000; // 一万亿 小数点同样适用: 0.000_001; // 一百万分之一,等于 0.000001 1e10_000; // 十万,等于 100000 分隔符不适用于以下情况: 100_ // syntax ...

Read more

正则表达式 word boundary

「字符边缘」 \b 用于匹配是否处于字符边缘。 有三种情况,字符边缘 \b 会匹配到: 在字符串最开始的位置,如果第一个字符是字符类型 \w 在字符串中,两个相邻的字符,如果一个是字符类型 \w,而另一个不是 在字符串结束的位置,如果最后一个字符是字符类型 \w 例如,正则表达式 \bJava\b 可以匹配到字符:Hello, Java!,因为 Java 是一个单独的字符;在 Hello, JavaScript! 中则无法匹配到。 alert( "Hello, Java!".match(/\bJava\b/) ); // Java alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null 同样,\bHe...

Read more

JavaScript 新提案:optional chaining(可选链)

Optional chaining 这是一项新的提案,老旧浏览器可能需要 polyfills。 Optional chaining ?.(可选链,以下简称 OC)是一种以安全的方式去访问嵌套的对象属性,即使某个属性根本就不存在。 起因: 一个在 JavaScript 中很常见的问题就是:假如用户信息中,地址是可填可不填的,那我们就无法安全地访问地址的某一个属性: let user = {}; // 用户可能没有填地址 alert(user.address.street); // 报错 或者下面这种情况,在 WEB 开发中,我们可能需要去获取一个 DOM 元素,但是这个 DOM 元素可能不存在: // 当 querySelector(...) 的结果为 null...

Read more