Javascript регулярное выражение * не * начало строки

Я бы счел себя искусным в понимании регулярных выражений; в первый раз, я был в тупике, и последние 20 минут поиска/поиска SO для ответа ничего не дали.

Рассмотрим строку:

var string = "Friends of mine are from France and they love to frolic."

И я хочу заменить или захватить (или сделать что-то с) каждое появление "fr" (без учета регистра).

Я мог бы использовать просто:

var replaced = string.replace(/fr/gi);

Однако, что, если я хотел игнорировать самое первое появление "fr"? Обычно я использовал положительный lookbehind (скажем, (?<=.)fr в php), но наш javascript нашего друга этого не делает. Не устанавливая стороннюю библиотеку, есть ли способ гарантировать, что мое выражение НЕ совпадает в начале строки?

Обновление:. Хотя есть средства для замены с захваченным $1, мой конкретный пример использования split() здесь и потребует исправления массива после факта, если я что-то использовал как предложение @Explosion Pills string.replace(/^(fr)|fr/gi, "$1");

Ответ 1

string.split(/(?!^)fr/gi);

Это оставляет вас с ["Friends of mine are ", "om ", "ance and they love to ", "olic."]

Ответ 2

Вы можете просто пойти по пути наименьшего сопротивления и использовать захват/чередование:

string.replace(/^(fr)|fr/gi, "$1");

Ответ 3

Я мог бы попробовать /(?!^)fr/gi. В основном, только в том случае, если утверждение начала строки не пройдет.

Ответ 4

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);
}

Ответ 5

var string = "Friends of mine are from France and they love to frolic."
var replaced = string.replace(/(.)fr/gi,'$1||').split('||')