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