Использование регулярных выражений для пропуска соответствия первой позиции Javascript

#regex

Вопрос:

попробуйте заменить строку IPProtocol стать I_p_protocol

 str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`)
 

производить _i_p_protocol

Комментарии:

1. Попробуй это: (?!^)[A-Z]

2. Решенный. Нужно изучить больше регулярных выражений. Большое спасибо.

Ответ №1:

Вы можете использовать отрицательный внешний вид, чтобы убедиться, что строка не начинается с начала строки: (?!^)[A-Z]

 const str = "IPProtocol";

const new_str = str.replace(/(?!^)[A-Z]/g, letter => `_${letter.toLowerCase()}`);

console.log(new_str); 

Ответ №2:

Вы можете использовать:

 var str = 'IPProtocol';
var r = str.replace(/B[A-Z]/g, letter => `_${letter.toLowerCase()}`);

console.log(r)
//=> "I_p_protocol" 

Здесь мы используем B[A-Z] метод, который позволяет сопоставлять заглавные буквы между символами слов, но не в первом месте слова.

Комментарии:

1. Мне трудно понять, что такое граница слова. Не могли бы вы объяснить немного подробнее? Большое спасибо.

2. Граница слова или b позиция между символом слова, т. е. [a-zA-Z0-9_] и не-символом слова. B является обратным от b , следовательно, он соответствует позиции только между 2 символами слова.

3. Вторая буква «Р» — это не слово, если я правильно понимаю, почему это не считается

4. Здесь мы говорим о словесном характере. Оба P появляются после другой буквы, следовательно, граница слова не совпадает перед rhwm

5. Пожалуйста, ознакомьтесь с этой справочной статьей по b