У меня есть строка, которая содержит слово, заключенное в @ - и - @, например так: эта @ -book- @ создана автором @ -gameauthor-@.
Мне нужна функция, которая найдет все экземпляры слов между этим корпусом и вернуть его. Это хорошо работает, если в нем есть только одно слово. Но если есть два слова, он вернет все между первым @ - и последним -@. Так что вместо возврата book и gameauthor он возвращает: -book- @ создан автором @ -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);