我需要一个解决我的特殊要求的办法。 我有一根弦
var mainString="[Avg Advisor Count by College numerator][Advising by college denominator] nominator count";
并有一个数组变量。
var searchArray = ["Advisor Count","Advising"];
我需要搜索主字符串中的数组元素,如果其中任何元素与主字符串中的元素匹配,则查找字符串中“[”的左首位和“]”的右首位,并封装到一个span中。
因为array的第一个元素在字符串“advisor count”中找到,第二个元素也在字符串中找到。 所以结果是
result = "<span>[Avg Advisor Count by College numerator]</span><span>[Advising by college denominator]</span>"
你能帮我找到一个在JavaScript中解决这个问题的方法吗。
我所尝试的是,我只是在MainString中搜索数组的确切字符串。 但是不知道如何在搜索字符串的左右位置搜索“[”。
var mainString = calculatedFields["formula"][i];
calculatedArray.forEach(function (value) {
if (fm.indexOf('[' + value + ']') > -1)
fm = replaceAll(fm, '[' + value + ']', '<span style="color:#f29343">[' + value + ']</span>');
else {
fm = replaceAll(fm, value, '<span style="color:#f29343">' + value + '</span>');
}
});
Regex 101演示:https://regex101.com/r/8mkcxs/1
与连接到(OR)中的搜索字符串周围的方括号匹配的正则表达式,或仅与连接到OR中的搜索字符串匹配的正则表达式。
增加了字符串转义。 参考:https://stackoverflow.com/A/6969486/120242
null
var mainString="[Avg Advisor Count by College numerator][Advising by college denominator] nominator count";
var searchArray = ["Advisor Count","Advising","count"];
searchArray = searchArray.map(escapeRegExp)
console.log(
mainString.replace(
new RegExp(String.raw`(\[[^\]]*(?:${searchArray.join('|')})[^\]]*\])|(${searchArray.join('|')})`,'g'),'<span>$1$2</span>'
)
)
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
这里有一种不同的方法,您可以将字符串拆分成一个数组,然后比较元素,结果是所有输出的concat字符串,如果您要单独使用它们,我假设您将把它们存储在一个对象中
var mainString="[Avg Advisor Count by College numerator][Advising by college denominator] nominator count";
var searchArray = ["Advisor Count","Advising"];
function producespan(mainString,searchArray){
var result=''
xarr=mainString.split(']')
searchArray.forEach(element => {
xarr.forEach(str=>{
if(str.includes(element)){
if(str.includes('['))
result+="<span>"+str+"]</span>"
else result+="<span>"+str+"</span>"
}
})
});
return result
}
console.log(producespan(mainString ,searchArray))