我有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));
在线演示 - http://jsbin.com/ERUpuYuq/1/
只需打开控制台,您就会看到两行:
Pie
cherryPie
预期结果是
pie - since it starts with "pie"
cherryPie
我试图在我的正则表达式的开头添加*
符号,没有任何运气。
如果我将.pie
设置为我的正则表达式,我会得到:
pie
cherrYpie
解决方案将是regexp替换,它将捕获所有不在字符串的beginnign处的出现。
任何人都知道regexp?
注意:cap
功能不应被修改。
答案 0 :(得分:1)
您可以添加自己的有条件调用cap
的函数,您声明无法修改。
var string = 'pie';
var string2 = 'cherrypie';
var string3 = 'piepie';
var cap = function(val) {
return val.charAt(0).toUpperCase()+val.slice(1);
};
// Capture two arguments: $1 is optional and only set if the string begins with
// something.
var regexp = new RegExp('(.+)?(pie)', 'g');
var capCheck = function($0, $1, $2){
// If $1 is set, return it plus the capitalised 'pie', otherwise return the
// original string (no replacement).
return $1 ? $1 + cap($2) : $0;
};
console.log(string.replace(regexp, capCheck));
// => pie
console.log(string2.replace(regexp, capCheck));
// => cherryPie
console.log(string3.replace(regexp, capCheck));
// => piePie
由于JavaScript RegExp中没有负面的lookbehind断言(我很遗憾),this answer给了我所需的解决方案。
More methods of mimicking lookbehind in JavaScript。关于使用前瞻,然后再次反转的字符串的一个是相当不错的,但这意味着你不能同时以正常的方式使用前瞻。
答案 1 :(得分:0)