正则表达式模式与符号 patterns and flags
表达式(patterns)
声明正则表达式有两种方式:
通过斜杠的方式声明
let regexp = /regexp/gmi;
通过 new 语法声明
let regexp = new RegExp("pattern", "flags");
上面两种方式创建的正则表达式效果都是一样的,它们都是内置 RexExp 的实例化。
这两种方式的主要区别是:使用斜杠的方式不允许插入表达式(例如模板字符串 {...})。
斜杠的方式比较常用,因为通常在写一个正则表达式时,就已经知道它的匹配规则了;但是如果需要动态创建一个正则表达式,则可以使用 new的方式,例如:
let tag = prompt("输入你想查找的标签", "h2");
let regexp...
正则表达式 Lookahead、LookBehind
某些情况下,我们需要找在某些字符后面或前面的字符,在正则表达式中,他们叫做 “lookaroud”。
题目(下文有引用):
1 turkey costs 30€
lookahead
Lookahead,即查找某个字符 A,但是字符 A 后紧跟着的其他字符必须匹配特定规则。
它的语法为:
它的意思是:查找 ```X```,但是他的后面必须**立即**跟随着 ```Y```,```X``` 和 ```Y``` 可以是任意字符。
使用 lookahead 来实现上面的题目的功能:找到在 € 字符前面的数字,也就是 30。
即查找某个以欧元结尾的数字,它的正则表达式为:
```\d+(?=€)```
**注意:**lookahead 仅仅是测试是否符合条件,不管是否符合条...
H5 中阻止浏览器前进后退手势
怎么阻止在 H5 浏览器中水平滑动页面时,页面后退或者前进?
EN
Android 端:
关键代码:
<style>
html {
touch-action: none;
}
</style>
加入你的网页由滑块验证码的时候,当用户在滑动滑块进行验证时,如果没有阻止浏览器的水平方向滑动后退手势,那用户在操作的时候就会返回上一级页面。
要阻止这种情况只需禁用掉浏览器默认的手势就行了。
touch-action 的作用就是禁用掉这个效果,它的解释是:
Determines whether touch input may trigger default behavior supplied by user agent.
...
逻辑赋值运算符
逻辑赋值运算符的作用是对逻辑运算符和赋值表达式的简写。
如果要判断一个变量是否为 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 时...
给 Node.js 搭建的 Express 项目增加网页热更新功能
通过 Node.js 和 Express 搭建的后台项目,通过 Express 来渲染 HTML 模版,虽然后端可以通过 nodemon 来实现热更新,但是热更新后并不会直接反应到网页上,而是要刷新一遍,因为浏览器并没有热更新。
解决这个问题的办法就是通过 Live server 这个插件。
具体流程如下:
先在编辑器上安装这个插件,推荐使用 VS Code;
在浏览器上安装一个 Live Server 插件,Chrome 或 Firefox;
启动你的 Express 服务,并且能够正常访问项目;
打开你的浏览器插件,填写项目信息:
项目地址,即浏览器中项目的访问网址
Live Server 的地址,即 VS Code 中这个...
数字分隔符(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 ...
正则表达式 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...
JavaScript 新提案:optional chaining(可选链)
Optional chaining
这是一项新的提案,老旧浏览器可能需要 polyfills。
Optional chaining ?.(可选链,以下简称 OC)是一种以安全的方式去访问嵌套的对象属性,即使某个属性根本就不存在。
起因:
一个在 JavaScript 中很常见的问题就是:假如用户信息中,地址是可填可不填的,那我们就无法安全地访问地址的某一个属性:
let user = {}; // 用户可能没有填地址
alert(user.address.street); // 报错
或者下面这种情况,在 WEB 开发中,我们可能需要去获取一个 DOM 元素,但是这个 DOM 元素可能不存在:
// 当 querySelector(...) 的结果为 null...
50 post articles, 7 pages.