Javascript 正则表达式内部的模板文本
我试图在正则表达式中放置一个模板文本,但没有成功。然后我制作了一个变量Javascript 正则表达式内部的模板文本,javascript,regex,template-literals,Javascript,Regex,Template Literals,我试图在正则表达式中放置一个模板文本,但没有成功。然后我制作了一个变量regex,它保存我的regex,但它仍然没有给出我想要的结果 但是,如果我单独使用console.log(regex),我确实会收到所需的regex,例如/.+?(?=location)/I,/.+?(?=date)/I等等,但是一旦我将regex放在中,它似乎就不起作用了 function validate (data) { let testArr = Object.keys(data); errorMessage
regex
,它保存我的regex,但它仍然没有给出我想要的结果
但是,如果我单独使用console.log(regex)
,我确实会收到所需的regex,例如/.+?(?=location)/I
,/.+?(?=date)/I
等等,但是一旦我将regex
放在中,它似乎就不起作用了
function validate (data) {
let testArr = Object.keys(data);
errorMessages.forEach((elem, i) => {
const regex = `/.+?(?=${elem.value})/i`;
const a = testArr[i].replace(regex, '');
})
}
您的regex
变量是一个字符串。要使其成为RegExp,请使用RegExp
构造函数:
const regex = new RegExp(String.raw`pattern_as_in_regex_literal_without_delimiters`)
例如,像//g
这样的正则表达式文本可以重写为
const re = RegExp(String.raw`<\d+>`, 'g') // One \ is a literal backslash
const re = RegExp(`<\\d+>`, 'g') // Two \ are required in a non-raw string literal
此外,加入regex也是一个好主意,因为所有特殊的regex元字符都被视为文本
const s=“最终(位置)”;
常量elemvalue=“(位置)”;
const regex=new RegExp(`.+?(?=${elemvalue.replace(/[-\/\^$*+?。()\[\]{}]/g,\\$&')})`,“i”);
//console.log(regex);//.+?(?=\(位置\)/i
//console.log(typeof(regex));//对象
设a=s.replace(regex,”);
控制台日志(a)代码>
模板文本的更高级形式是。-MDN
const escape=s=>`${s}`.replace(/[-\/\\^$*+.()\[\]{}]/g,\$&);
常量正则表达式=({//(1)
原始:[部分,…部分]
},…subs)=>新的RegExp(
subs.reduce(//(2)
(result,sub,i)=>`${result}${escape(sub)}${parts[i]}`,
部分
)
);
常数t1=`d`;
常量r1=regex`^ab(c${t1}e)`;//(3)
///^ab(cde)/
log('r2.test(`abc${t1}e`);➜', r1.测试(`abc${t1}e`);//真的
//检查是否有适当的逃逸特殊字符
常数t2=`(:?bar)\d{2}`;
常量r2=regex`foo${t2}`;
///foo\(:\?bar\)d\{2\}/➜ t2逃脱了!
console.log('r2.test('foo${t2}');➜', r2.测试(`foo${t2}`);//真的
console.log('r2.test('foo\(:\?bar\)d\{2\}');➜', r2.测试(`foo\(:\?bar\)d\{2\}');//真的
console.log('r2.test('foobar11');➜', r2.测试(`foobar11`);//假的
控制台日志(r2)代码>这读起来更像是一篇博客文章,而不是适合StackOverflow的文章,它似乎并没有真正回答这个问题。
const digits = String.raw`\d+`;
const re = RegExp(`<${digits}>`, 'g')
const regex = new RegExp(`.+?(?=${elemvalue.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')})`, "i");