let s = "AbcDefGH"
s.match(/[A-Z]+[a-z]*/g)
["Abc", "Def", "GH"] // This is what expecting with split function
s.split(/(?=[A-Z]+[a-z]*)/g)
["Abc", "Def", "G", "H"] // "G" and "H" are separated.
Мой вопрос: как заменить регулярное выражение соответствия на функцию разделения, чтобы получить тот же результат совпадения.
Пожалуйста, объясните, для чего ?=
, когда регулярное выражение соответствия переводится в функцию разделения.
Спасибо
Это работает. Спасибо. Можете ли вы объяснить, как <
решили эту проблему, пожалуйста.
Это взгляд назад. Таким образом, оно соответствует заглавной букве, только если ей предшествует строчная буква.
Обратите внимание, что использование метода сопоставления более эффективно.
Вы можете включить флаг u
или v
JavaScript, чтобы использовать Unicode и
особенности набора символов. Таким образом, вы можете использовать \p{L}
для соответствия любому
письмо на любом языке. Это будет безопаснее, чем использовать [a-zA-Z]
в качестве
он будет соответствовать символам с диакритическими знаками, а также нелатинским символам.
В вашем случае мы хотим сопоставить строчные и прописные буквы. письмо. Поэтому мы будем использовать позитивный взгляд чтобы найти строчную букву, за которой следует позитивный прогноз чтобы найти заглавную букву:
просмотр назад: (?<=\p{Ll})
, где \p{Ll}
будет соответствовать строчной букве
на любом языке, например «a», «à» или «ÿ».
предварительный просмотр: (?=\p{Lu})
, где \p{Lu}
будет соответствовать заглавной букве
на любом языке, например «C», «Ç» или «É».
Вот подробный список категорий Юникода.
И небольшой пример кода, иллюстрирующий это:
// Enable the `u` or `v` flag to have Unicode and character set features.
// \p{L} matches any Unicode letter
// \p{Ll} matches any Unicode lowercase letter.
// \p{Lu} matches any Unicode uppercase letter.
// (?<=\p{Ll}) is a positive lookbehind to find a lowercase letter.
// (?=\p{Lu}) is a positive lookahead to find an uppercase letter.
const regex = /(?<=\p{Ll})(?=\p{Lu})/gu;
const inputs = [
"AbcDefGH",
"J'aiMangéEtBuÀVolonté",
"IAteAndDrankAsMuchAsIWanted"
];
inputs.forEach((input) => {
console.info('Input = "' + input + '"');
console.info(input.split(regex));
});
Используйте
s.split(/(?<=[a-z])(?=[A-Z])/)