一、正则
正则基础:正则主题+修饰符
(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) replace
let 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`