当ES6遇上字符串和正则表达式(2)

let text = 'hello1 hello2 hello3'; let patt = /hello\d\s?/, result = patt.exec(text); let gPatt = /helllo\d\s?/g, gResult = gPatt.exec(text); let yPatt = /hello\d\s?/y, yResult = yPatt.exec(text); console.log(resut[0]); //"hello1 " console.log(gResut[0]); //"hello1 " console.log(yResut[0]); //"hello1 " patt.lastIndex = 1; gPatt.lastIndex = 1; yPatt.lastIndex = 1; result = patt.exec(text); gResult = gPatt.exec(text); yResult = yPatt.exec(text); console.log(resut[0]); //"hello1 " console.log(gResut[0]); //"hello2 " console.log(yResut[0]); //抛出错误

这里三个正则表达式中,第一个没有修饰符,第二个全局修饰符g,第三个用了y修饰符。

第一次匹配的时候是从h字符开始匹配。当lastIndex = 1;之后,对于没有修饰符的表达式自动忽略这个变化,结果还是hello1 ,g修饰符会从e字符开始匹配,输出hello2 ,yResul会从e字符开始匹配,ello h与之不等,最后结果为null,所以会抛出错误。

当执行y修饰符之后,会把上一次匹配最后的一个字符的后一位索引值保存在lastIndex中去,如果执行y修饰符匹配结果为空那么lastIndex值会被重置为0,g修饰符与此相同。

只有调用正则表达式对象的exec()和test()这些方法时才会设计lastIndex属性,如调用字符串的方法natch()就不会触发粘滞行为。

检测y修饰符是否存在可以用sticky属性,如果js引擎支持粘滞修饰符,则stickey属性值为true,否则为false

let patt = /hello\d/y; console.log(patt.sticky);

1.2正则表达式的复制

在es5中,可以给正则表达式的构造函数传递正则表达式作为参数来复制这个正则表达式。但事实第一个参数为正则表达式的时候不能用第二个参数,es6中修改了这个行为,第二个参数可以是修饰符。

let re1 = /ab/i; let re2 = new RegExp(re1,"g"); console.log(re1.toString()); // "/ab/i" console.log(re2.toString()); // "/ab/g"

1.3flags属性

es6新增的flags属性会返回所有应用于当前正则表达式的修饰符

let re = /ab/g; console.log(re.source); //"ab" console.log(re.flags); //"g"

2.模板字面量

2.1基础语法

一句话概括,用反撇号(`)代替了双引号,单引号。

如果想在字符串中用反撇号,就用\转义即可。如

let message = `\`hello\`!`; console.log(message);

结果是 hello!

2.2简化的多行字符串

在es6之前,通过数组或字符串拼接的方法来创建多行字符串,es6中只需要在代码中直接换行,换行也改变length属性值。同时再反撇号中所有的空格符都属于字符串的一部分。

let message = `Multiline string`; console.log(message); console.log(message.length); //16=6+9+1

2.3 字符串占位符

在一个模板字面量中,你可以把任何合法的JavaScript表达式嵌入到占位符中并将其作为字符串的一部分输出到结果中。

占位符通常由${}组成,中间可包含任何JavaScript表达式。模板字面量本身也是JavaScript表达式,因此在一个模板字面量里面可以嵌入另外一个模板字面量。

let name = "sarah"; let message = `my${`name is${name}.`}`; console.log(message);//my name is sarah.

message是一个模板字面量,里面又包含了name is${name}.这个模板字面量。

总结

以上所述是小编给大家介绍的当ES6遇上字符串和正则表达式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjxjsj.html