Javascript:查找两个字符串之间的每个字符串实例

Javascript:查找两个字符串之间的每个字符串实例,javascript,string,search,replace,Javascript,String,Search,Replace,我有一个字符串,其中包含一个字,它包含在@和-@中,如:This@-book-@是由author@-gameauthor-@创建的 我需要一个函数,它将查找封装之间的所有单词实例并返回它。如果里面只有一个单词,它就可以很好地工作。但是如果有两个词,它将返回介于第一个和最后一个词之间的所有内容。因此,它不会返回book和gameauthor,而是返回:-book-@是由author@-gameauthor创建的- 我编写了此函数和代码,如何改进它: function findBetween(tex

我有一个字符串,其中包含一个字,它包含在@和-@中,如:This@-book-@是由author@-gameauthor-@创建的

我需要一个函数,它将查找封装之间的所有单词实例并返回它。如果里面只有一个单词,它就可以很好地工作。但是如果有两个词,它将返回介于第一个和最后一个词之间的所有内容。因此,它不会返回book和gameauthor,而是返回:-book-@是由author@-gameauthor创建的-

我编写了此函数和代码,如何改进它:

function findBetween(text, firststring, secondstring) {


    //Function to text between two strings.
    var firstvariable = firststring;
    var secondvariable = secondstring;
    var text = text;

    var regExString = new RegExp("(?:" + firstvariable + ")((.[\s\S]*))(?:" + secondvariable + ")", "g"); 

    var strResult = regExString.exec(text);
if (strResult != null) {
    return strResult[1];
    }
}

var str = "This @-book-@ is created by author @-gameauthor-@.";

var test = findBetween(str, "@-", "-@");

alert(test);
编辑:以下是使用以下解决方案更新的代码:

function replaceAll(str, find, replace) {
  return str.replace(new RegExp(find, 'g'), replace);
}   

var book = "Moby Dick";
var gameauthor = "Joey DiPerla";

var str = "This @-book-@ is created by author @-gameauthor-@.";

var myArray = str.split("@");

var len = myArray.length;

for(let i = len-1;i>=0;i--){  
   myArray[i] = myArray[i].replace(/-/g, '');
   if(i%2 == 0) {
       myArray.splice(i,1)

    if ( myArray[i] !== undefined) {

        var find = "@-" + myArray[i] + "-@";
        var replace = eval(myArray[i]);

        str = replaceAll(str, find, replace);
    }

   }
}

alert(str);

您希望使用split函数将字符串分解为字符串数组,然后删除“-”。最后,移除拼接时不需要的元件

var str=“此@book-@由作者@gameauthor-@创建。”;
var myArray=str.split(“@”);
var len=myArray.length;
对于(设i=len-1;i>=0;i--){
myArray[i]=myArray[i]。替换(/-/g',);
如果(i%2==0)myArray.splice(i,1);
}

log(myArray)
虽然您不需要在RegExp文本中转义
\
,但您确实需要在RegExp字符串中转义
\
。。。但这只是你问题的一部分:

函数findBetween(str,start,end=null){ 设s=开始,e=结束; 如果(e==null)e=s; 常量x=newregexp(s+'[^'+e+']+'+e,'g'),m=str.match(x),r=newregexp('^'+s+'|'+e+'$','g'); 返回m.map(s=>s.replace(r',); }
log(findBetween('This@-book-@由author@-gameauthor-@、'@-'和'-@'创建)这称为“贪婪匹配”。通过使用将其关闭。另外,利用模板文本:
newregexp(`(?:${firststring})(([\s\s]*)(?:${secondstring})`,“g”)。在现代JS中不需要
“…+”…
。我想您正在寻找
@-(.[^]*?)-@
,并获得捕获组1的价值,我将此用作我的解决方案。请参阅我的原始帖子中更新的代码。