Javascript正则表达式匹配*不是*行首

时间:2013-12-18 00:57:28

标签: javascript regex

我认为自己善于理解正则表达式;这是第一次,我被困了,最后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");

5 个答案:

答案 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('||')