#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