Ответ 1
string.split(/(?!^)fr/gi);
Это оставляет вас с ["Friends of mine are ", "om ", "ance and they love to ", "olic."]
Я бы счел себя искусным в понимании регулярных выражений; в первый раз, я был в тупике, и последние 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");
string.split(/(?!^)fr/gi);
Это оставляет вас с ["Friends of mine are ", "om ", "ance and they love to ", "olic."]
Вы можете просто пойти по пути наименьшего сопротивления и использовать захват/чередование:
string.replace(/^(fr)|fr/gi, "$1");
Я мог бы попробовать /(?!^)fr/gi
. В основном, только в том случае, если утверждение начала строки не пройдет.
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);
}
var string = "Friends of mine are from France and they love to frolic."
var replaced = string.replace(/(.)fr/gi,'$1||').split('||')