提问者:小点点

查找字符串javascript左,右中第一个出现的字符


我需要一个解决我的特殊要求的办法。 我有一根弦

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>');
                }
            });

共2个答案

匿名用户

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