Javascript 是否有方法在带有换行符(\n)的字符串中搜索子字符串?

Javascript 是否有方法在带有换行符(\n)的字符串中搜索子字符串?,javascript,html,Javascript,Html,我有一个里面有\n字符的文本,我有一个短语数组,我想在这个文本中通过用标签包装它的片段来突出显示。问题是,如果有\n符号,我在文本中找不到这些短语 我试图从文本中替换\n,但我需要在突出显示后恢复它们 let text='正在寻找企业测试创作平台?\n 了解有关仪表的详细信息\n 观看我们的视频,了解Gauge是否能帮助您 let短语=[“创作平台?了解更多”、“观看我们的视频”、“可以帮助您”] const highlight=(短语)=>text.replace(短语,`${phrase}`

我有一个里面有
\n
字符的文本,我有一个短语数组,我想在这个文本中通过用标签包装它的片段来突出显示。问题是,如果有
\n
符号,我在文本中找不到这些短语

我试图从文本中替换
\n
,但我需要在突出显示后恢复它们

let text='正在寻找企业测试创作平台?\n
了解有关仪表的详细信息\n
观看我们的视频,了解Gauge是否能帮助您
let短语=[“创作平台?了解更多”、“观看我们的视频”、“可以帮助您”]
const highlight=(短语)=>text.replace(短语,`${phrase}`)
短语.map(短语=>text=突出显示(短语))

只有最后一个短语与文本匹配。我正在寻找一些方法来忽略
\n
并匹配所有这些短语。或者也许有另一种方法来解决这个问题。我将感谢任何帮助

只需从字符串中删除\n并检查该字符串中的短语,如下所示

let text = 'Looking For An Enterprise Test Authoring Platform?\n
Learn More About Gauge\n
Watch our video to learn ifGauge can help you.';

let phrases = ["Authoring Platform? Learn More", "Gauge Watch our video", "can help you"];

//string without \n
let plainText = text.replace("\n", "");

const highlight = (phrase) => {
    return plainText.replace(phrase, `<mark style="background: #4CAF50">${phrase}</mark>`)
}


phrases.map(phrase=> {
    text = highlight(phrase)
})  
let text='正在寻找企业测试创作平台?\n
了解有关仪表的详细信息\n
观看我们的视频,了解Gauge是否可以帮助您。”;
让短语=[“创作平台?了解更多”、“观看我们的视频”、“可以帮助你”];
//不带字符串的字符串\n
让明文=text.replace(“\n”,”);
常量突出显示=(短语)=>{
返回纯文本.replace(短语,`${phrase}`)
}
短语.映射(短语=>{
text=突出显示(短语)
})  

一个选项是循环短语并创建dynamci正则表达式。将每个
\s
替换为
(?:\n)*
。这将创建一个动态正则表达式,如下所示:

/Authoring(?:\n)* Platform\?(?:\n)* Learn(?:\n)* More/
然后使用匹配的子字符串替换
文本。这将保留原始字符串中的
\n

let text='正在寻找企业测试创作平台?\n了解有关Gauge的更多信息\n观看我们的视频,了解Gauge是否可以帮助您。'
let短语=[“创作平台?了解更多”、“观看我们的视频”、“可以帮助您”]
// https://stackoverflow.com/a/494122
const escape=str=>str.replace(/([.?*+^$[\]\\(){}\\\\-])/g,“\\$1”)
短语。forEach(p=>{
const regex=new RegExp(escape(p).replace(/\s/g,'\(?:\n)*'))
text=text.replace(正则表达式,`$&`)
})

console.log(text)
您可以选择第一个单词,并将您的句子与这个简单的正则表达式进行匹配

let text = 'Looking For An Enterprise Test Authoring Platform?\n
            Learn More About Gauge\n
            Watch our video to learn ifGauge can help you.';

 text.match(/\Gauge (.*?) video\b/gis)
 // ["Gauge↵↵Watch our video"]
 // \n character is being preserved

不过,这可能会使问题变得更复杂一些,因为您需要找到每个句子的第一个和最后一个单词。

“我试图替换文本中的\n个单词,但我需要在突出显示后恢复它们。”惰性解决方案:首先保存索引(位置)of \n->从字符串中删除它们->替换子字符串->在存储在第一个字符串中的位置重新添加到字符串中step@AdamsHales如果仅在单词之间出现换行符,则环绕短语后,
\n
需要转到的位置将发生变化,然后,您可以很容易地将搜索模式编写为允许它们之间换行的实际正则表达式。将其与捕获匹配项相结合,这样您就可以在以后的替换中使用它。(但是,您所拥有的不会用于多个重叠的替换项—如果您曾经将
标记为
样式
作为“短语”进行替换,那么这当然会打乱您之前所做的任何替换。)如果没有可重复的数据,它似乎正在工作words@AngelinaRatnykova你能给我举个例子吗?我会看看我能不能绕过这一点