JavaScript ReplaceAll 使用变量而不是字符串进行不区分大小写的搜索

我想replaceAll()在不区分大小写的搜索中使用变量(而不是字符串)执行 JavaScript,但也保留匹配文本的大小写(在返回中)。例如,


console.log('doc.p:', doc.p.toString().substring(0, 26))

var query = this.manager.store.get('q').value.toString();

console.log('query:', query, '| type:', typeof(query))

console.log(doc.p.toString().replaceAll(/(dna)/gi, '***$1***'))

console.log(doc.p.toString().replaceAll(/(query)/gi, '***$1***'))

正在给予


doc.p: DNA deoxyribonucleic acid     // target text

query: dna | type: string            // query text

***DNA*** deoxyribonucleic acid ...  // [success] case-insensitive search; case-sensitive return

DNA deoxyribonucleic acid ...        // [failure] I've also tried (e.g.) $query, $(query), ... here


工作完成后,我将用 HTML 代码替换“***”(仅用于测试/说明)。


慕丝7291255
浏览 214回答 3
3回答

aluckdog

RegExp您需要使用-创建正则表达式var reg = new RegExp(`(${query})`, "gi")var doc = "DNA deoxyribonucleic acid";var query = "dna"var exp = `(${query})`var reg = new RegExp(exp, "gi")var result = doc.replaceAll(reg, "***$1***");console.log(result);

繁星点点滴滴

基本上,您想要的是创建动态正则表达式,而不是对其进行硬编码。这是在 的帮助下完成的。RegExp 构造函数,它采用正则表达式和标志的字符串表示形式(我弄乱了字符串大写以演示大小写的保存):string1 = 'DnA deoxyribonucleic acid'string2 = 'DNA deoxyribonucleic aCId'const replacer = (str, replace) => {  const re = new RegExp(`(${replace})`, 'gi')  return str.replaceAll(re, '***$1***')}console.log(replacer(string1, 'dna'))console.log(replacer(string2, 'acid'))

素胚勾勒不出你

JavaScriptreplace已经具有执行不区分大小写搜索的功能,同时还保留捕获组的原始大小写,例如var input = "DNA deoxyribonucleic acid";var output = input.replace(/(dna)/ig, "***$1***");console.log(output);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript