Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式内部的模板文本_Javascript_Regex_Template Literals - Fatal编程技术网

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");