一、正则
正则基础:正则主题+修饰符
(1)两种创建方法:
let reg1 = /abc/g, // [abc]是匹配中括号里的字符,不包括数字。reg2 = new RegExp('abc', 'g') // pattern + modifiers
(2)正则对象的方法
// (1) test 判断是否匹配let reg = new RegExp('[abc]','i');reg.test('123[fdas]') // => true// (2) exec 检索匹配并返回匹配值与相关信息,没有匹配成功返回null。reg.exec('[1][23][567]')
(3)字符串使用正则的方法
// (1) replacelet reg = new RegExp('sb', 'g'),str = 'sb的js编程功力很深厚';console.log(str.replace(reg, 'frank')) //可以用正则、也可以用字符串// (2)search 查找匹配内容的索引let reg = new RegExp('frank', 'g'),str = 'frank的js编程功力很深厚';console.log(str.search(reg) + 1) // => 1
二、字符串
(1)endsWith、startsWith判断是否以某个字符串开头结尾
let str = 'frankawsome';console.log(str.startsWith('frank'), str.endsWith('me')) // => true, true
(2)includes判断是否包含相关字符串
let str = 'frankawsome';console.log(str.includes('some'))
(3)padStart、padEnd 补齐方法,改变原字符串<br />参数:a.补齐后长度<br /> b.补齐材料
let str = 'a';str.padStart(5,'fk')str.padEnd(5,'fk') // => 'afkfk'
三、模板字符串
es6中,对普通字符串的增强,可以作为普通字符串使用,还可以定义多行字符串,还可以在其中引用js变量。
模板字符串用反引号包裹,如果要用到反引号,需要使用反斜杠进行转义。
let obj = {name: 'frank', age: 25},str = `I'm ${obj.name} , \`${obj.age}\` old`;
(1)模板字符串中,**空格符会被保留**,大括号里面可以进行**任意计算,函数执行。**
function tplFun(item){return `this is a ${item} template string`}let str = `description: ${tplFun('inhenced')}`;console.log(str)
(2)大括号中的非字符串对象会转化为字符串([先转化为对象],调用toString)。<br /> (3)模板字符串嵌套
let data = [{name:'one'},{name:'two'}]templateStr = `<table>${data.map(item => `<tr><td>${item.name}</tr></td>` ).join('')}<table>`;console.log(templateStr);//这种直接渲染的方式,如果被劫持数据后,会被恶意攻击//这个时候可以用到标签模板
(4)为了解决数据被劫持产生的恶意攻击,es6提供了标签模板。<br />模板标签类似一个函数。调用方法是标签后面加上模板字符串。<br />函数第一个参数为 一个数组,包含了未被变量替换的字符串片段。<br />后面参数为模板字符串中的变量引用值。<br />通过遍历,过滤变量引用值中的HTML 字符串(将标签<>转义)
function htmlStrReplace(s){return s.replace(/</g,'$gt;').replace(/>/g,'$lg;')}function saferString(strFragments, ...viriablesArr){console.log('123')let str = strFragments[0];viriablesArr.forEach((elem,index)=>{console.log(elem,index)str += htmlStrReplace(elem);str += strFragments[index]})return str}let obj = {name: '<script>alert("nmsl")</script>'};let message = saferString`${obj.name} has send you a message`
