我认为自己善于理解正则表达式;这是第一次,我被困了,最后20分钟的谷歌搜索/搜索SO的答案没有产生任何结果。
考虑字符串:
var string = "Friends of mine are from France and they love to frolic."
我想替换或捕获(或做某事)每次出现“fr”(不区分大小写)。
我可以使用,简单地说:
var replaced = string.replace(/fr/gi);
但是,如果我想忽略第一次出现的“fr”怎么办?通常我会使用一个积极的lookbehind(例如,在php中(?<=.)fr
)来做这个,但我们的朋友javascript不这样做。如果没有安装第三方库,有没有办法确保我的表达式在行首不匹配?
更新:虽然有替代捕获的$1
的方法,但我的特定用例是split()
,并且需要在事后修复数组如果我使用@Explosion Pills的建议string.replace(/^(fr)|fr/gi, "$1");
答案 0 :(得分:18)
string.split(/(?!^)fr/gi);
这会让您["Friends of mine are ", "om ", "ance and they love to ", "olic."]
答案 1 :(得分:5)
你可以走最小阻力的路径并使用捕获/交替:
string.replace(/^(fr)|fr/gi, "$1");
答案 2 :(得分:2)
我可能会尝试/(?!^)fr/gi
。基本上,只匹配字符串开头断言不能通过的地方。
答案 3 :(得分:1)
var string = "Friends of mine are from France and they love to frolic."
var replaced;
if(string.substr(0, 2).toLowerCase() == "fr"){
replaced = string.substr(0, 2)+string.substr(2).replace(/fr/gi);
}
else{
replaced = string.replace(/fr/gi);
}
答案 4 :(得分:0)
var string = "Friends of mine are from France and they love to frolic."
var replaced = string.replace(/(.)fr/gi,'$1||').split('||')