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