JavaScript 的正则表达式可以用两种表达方式:
const s0 = /abc/i;
const s2 = new RegExp('abc', 'i');
这两种表达式等价。
JS 正则有两个属性,flags
和 source
console.log(s0.flags)
//> i
console.log(s0.source)
//> abc
flags
会输出它的标志,source
则输出它的正则匹配串。
利用这两个属性,就可以去拼接两个正则:
const s0 = /abc/i;
const s1 = /efg/gi;
// 连接所有 flags
let allFlags = s0.flags + s1.flags;
// 利用去除重复的 flags
let deDupFlagsSet = new Set(allFlags.split(''));
// 重新拼成 flags 字符串
let deDupFlags = Array.from(deDupFlagsSet).join('');
// 拼接两个正则
const s3 = new RegExp(s0.source + s1.source, deDupFlags);
console.log(s3)
//> /abcefg/gi
💥 注意 flags
需要去重,不然 RegExp
构造函数会抛出 SyntaxError
错误。