Javascript Regexp:don';不要从一开始就替换

Javascript Regexp:don';不要从一开始就替换,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个类似于pie和cherrypie的字符串 如何替换字符串中所有出现的pie,而不是以pie开头 以下是我目前的情况: var regexp = new RegExp('pie', 'g'); var string = 'pie'; var string2 = 'cherrypie'; var cap = function(val) { return val.charAt(0).toUpperCase()+val.slice(1); } console.log(string.replac

我有一个类似于
pie
cherrypie
的字符串

如何替换字符串中所有出现的
pie
,而不是以
pie
开头

以下是我目前的情况:

var regexp = new RegExp('pie', 'g');
var string = 'pie';
var string2 = 'cherrypie';
var cap = function(val) {
return val.charAt(0).toUpperCase()+val.slice(1);
}

console.log(string.replace(regexp, cap));
console.log(string2.replace(regexp, cap));
在线演示-

只需打开控制台,您将看到两行:

Pie 
cherryPie 
预期的结果是

pie - since it starts with "pie" 
cherryPie 
我尝试在regexp的开头添加
*
符号,但没有成功

如果我将
.pie
设置为我的regexp,我会得到以下结果:

pie 
cherrYpie 
解决方案将是一个regexp替换,它将捕获所有不放在字符串开头的事件

有人知道regexp吗


注意:
cap
功能不应修改。

例如,您可以尝试dot

您可以添加自己的函数,该函数有条件地调用
cap
,您说您不能修改它

var字符串='pie';
var string2=‘樱桃派’;
变量string3=‘piepie’;
var cap=功能(val){
返回val.charAt(0.toUpperCase()+val.slice(1);
};
//捕获两个参数:$1是可选的,仅当字符串以开头时设置
//什么。
var regexp=new regexp(“(.+)?(pie)”,“g”);
var capCheck=函数($0、$1、$2){
//如果设置了$1,则返回它加上大写的“饼”,否则返回
//原始字符串(无替换)。
返回$1?$1+上限($2):$0;
};
log(string.replace(regexp,capCheck));
//=>馅饼
log(string2.replace(regexp,capCheck));
//=>樱桃派
log(string3.replace(regexp,capCheck));
//=>馅饼
由于JavaScript RegExp中没有否定的lookback断言(我有一个sad),所以给了我所需的解决方案


。关于反转字符串,使用lookahead,然后再次反转的一个非常好,但这意味着不能同时以正常方式使用lookahead。

我不能使用这个,因为
cap
函数是全局的,它与函数是全局的有什么关系?这个函数也被另一个代码使用。用
切片
修改再制作一个克隆将使我的代码变成杏仁饼。对不起,我以为你需要解决方案。
切片
修改不是解决方案