首先基础知识来一波
. 表示除\n之外的任意字符
+ 匹配前面的子表达式一次或多次。
(?<=exp) 是以exp开头的字符串, 但不包含本身。
(?=exp) 就匹配为exp结尾的字符串, 但不包含本身。
注:语句外面的括号不可省略
g 匹配全局
首先是包含括号的形式
const str="1111{kkk}123[1233333]1233331[askdfksd]12(1233)kkk";;
const reg1 = /\((.+?)\)/g; // () 小括号
const reg2 = /\[(.+?)\]/g; // [] 中括号
const reg3 = /\{(.+?)\}/g; // {} 花括号,大括号
// 输出是一个数组
console.log(str.match(reg1)); //['(1233)']
console.log(str.match(reg2));//['[1233333]', '[askdfksd]']
console.log(str.match(reg3));//['{kkk}']
如果不需要包含括号,则使用如下形式:
将(与(?<=()替换,)与(?=))替换,其他括号同理。
const str="1111{kkk}123[1233333]1233331[askdfksd]12(1233)kkk";
var reg1 = /(?<=\()(.+?)(?=\))/g; // () 小括号
var reg2 = /(?<=\[)(.+?)(?=\])/g; // [] 中括号
var reg3 = /(?<=\{)(.+?)(?=\})/g; // {} 花括号,大括号
// 输出是一个数组
console.log(str.match(reg1)); //['1233']
console.log(str.match(reg2));//['1233333', 'askdfksd']
console.log(str.match(reg3));//['kkk']
由此延伸出的实际应用场景,
一、
例如我在rollup.js 中使用了插件 rollup-plugin-require-context
const requireCxt = require.context("./utils", true, /.js/)
// 其中requireCxt.keys() 获取到的数据是 诸如: './debounce.js'
// 我要获取其中的 debounce 作为key,则可通过上述的方案实现,
const reg = /(?<=\.\/)(.+?)(?=.js)/g; // 去掉 ./ 和 js
const name = item.match(reg) // debounce
二、
小程序中 直接应用pc端的富文本可能会报错,需要正则替换掉会报错的标签
let parseData = this.docBody.replace(/(\t|\n)/g,''); // 去掉所有富文本中的空格,换行等
parseData = parseData.replace(/(<script).*?(\/script>)/, '') // 替换掉会引起报错的script标签。
parseData = parseData.replace(/(<html>)|(<\/html>)/g, '') // 替换掉会引起报错的html标签。
parseData = parseData.replace(/(<body>)|(<\/body>)/g, '') // 替换掉会引起报错的html标签。
parseData = parseData.replace(/( )/g, '') // 替换掉会引起报错的html标签。
parseData = parseData.replace(/(<p><!--\[if !mso])[\s\S]*?(<!\[endif]--><\/p>)/g, '') // 替换掉会引起报错的标签。
parseData = parseData.replace(/(<style).*?(\/style>)/, '') // 替换掉会引起报错的script标签。
// <!--[if gte mso 9]> <![endif]-->
// <!--[if supportMisalignedColumns]--> <!--[endif]-->
parseData = parseData.replace(/(<!--\[if).*?(endif]-->)/g, '') // 替换掉会引起报错的标签。