Во всех фрагментах кода я нахожу что-то или что-то пропущенное. Пожалуйста, попробуйте использовать приведенный ниже фрагмент кода и посмотрите, работает ли он. Это должно быть правильным способом сделать это
DtaDisplay1 = ({match}) => {
const id = match.params.pid;
return (
<div>
<h1>{id}</h1>
</div>
);
}
В зависимости от Вашей точной проблемы это могло быть более сложно, чем Вы думаете, и простой regex не мог бы работать. Вы думали о капитализации в слове? Что, если слово запускается с пунктуации как '... Word'? Есть ли какие-либо исключения? Что относительно международных символов?
Могло бы быть лучше использовать модуль CPAN как текст:: автоформат или текст:: Используйте для своей выгоды, где эти проблемы были уже решены.
use Text::Capitalize 0.2;
print capitalize_title($t), "\n";
use Text::Autoformat;
print autoformat{case => "highlight", right=>length($t)}, $t;
Это походит на текст:: автоформат мог бы быть более "стандартным", и я попробую это сначала. Его записанный Damian. Но текст:: Используйте для своей выгоды делает несколько вещей что текст:: автоформат не делает. Вот сравнение.
Можно также проверить Поваренную книгу Perl для (страницы 31) recipie 1.14 о том, как использовать regexps для надлежащего превращения в капитал заголовка или заголовка.
s/(\s\w)/\U$1\E/g;
Я первоначально предложил:
s/\s\w/\U$&\E/g;
но сигналы тревоги уходили при использовании '$ и' (даже, прежде чем я прочитал комментарий @Manni). Оказывается, что они полностью выравниваются по ширине - использование $ и, $' и $' операции вызывает полную неэффективность в regexes.
\E не очень важен для этого regex; это выключает 'устанавливающий случай' переключатель \U
в этом случае или \L
для нижнего регистра.
Как отмечено в комментариях, соответствуя первому символу строки требует:
s/((?:^|\s)\w)/\U$1\E/g;
Исправленное положение второй близкой круглой скобки - спасибо, Blixtor.
Что-то вроде этого должно добиться цели -
s!(^|\s)(\w)!$1\U$2!g
Это просто разделяет просканированное выражение на два соответствия - 1$ для очищения/начинания строки и 2$ для первого символа слова. Мы затем заменяем и 1$ и 2$ после создания запуска верхнего регистра слова.
Я изменил бы \s на \b, который имеет больше смысла, так как мы проверяем на границы слова здесь.
Это не что-то, для чего я обычно использовал бы regex, но мое решение не точно, что Вы назвали бы "красивым":
$string = join("", map(ucfirst, split(/(\s+)/, $string)));
Это split()
s строка пробелом и получениями весь пробел, затем проходит каждый элемент списка и делает ucfirst
на них (создание первого символьного верхнего регистра), затем join()
s их назад вместе как единственная строка. Не ужасный, но возможно Вам понравится regex больше. Мне лично просто не нравится \Q
или \U
или другие полунеловкие конструкции regex.
Править: Кто-то еще упомянул, что пунктуация могла бы быть потенциальной проблемой. Если, скажем, Вы хотите это:
...string
измененный на это:
...String
т.е. Вы хотите слова, использованные для своей выгоды, даже если существует пунктуация перед ними, попробуйте что-то больше как это:
$string = join("", map(ucfirst, split(/(\w+)/, $string)));
То же самое, но это split()
s на словах (\w+
) так, чтобы полученные элементы списка были только для слова. Тот же полный эффект, но использует для своей выгоды слова, которые не могут запуститься со словесного символа. Изменение \w
кому: [a-zA-Z]
устранить попытку использовать для своей выгоды числа. И просто обычно настраивайте его однако, Вам нравится.
Если Вы имеете в виду символ после пространства, используйте использование регулярных выражений \s
. Если Вы действительно имеете в виду первый символ в слове, необходимо использовать \b
вместо всех выше попыток с \s
который подвержен ошибкам.
s/\b(\w)/\U$1/g;
Вы хотите соответствовать буквам позади пробела, или в начале строки.
Perl не может сделать переменной длины lookbehind. Если это сделало, Вы, возможно, использовали это:
s/(?<=\s|^)(\w)/\u$1/g; # this does not work!
Perl жалуется:
Variable length lookbehind not implemented in regex;
Можно использовать дважды отрицательный lookbehind для обхождения этого: вещь слева от него должна быть ничем, что не является пробелом. Это означает, что будет соответствовать в начале строки, но если существует что-нибудь перед ним, это должен быть пробел.
s/(?<!\S)(\w)/\u$1/g;
Более простой подход в этом точном случае должен будет, вероятно, просто соответствовать пробелу; ограничение переменной длины отпадает, затем, и включайте это в замену.
s/(\s|^)(\w)/$1\u$2/g;
Иногда Вы не можете использовать этот подход в повторных заменах, потому что, что то, что предшествует фактическому соответствию, уже съел regex, и хорошо иметь путь вокруг этого.
Используйте для своей выгоды ЛЮБОЙ символ, которому предшествует пробел или в начале строки:
s/(^|\s)./\u$1/g
Возможно, очень неаккуратный способ сделать его, потому что это - также uppercasing пробел теперь.:P Преимущество состоит в том, что это работает с буквами со всеми возможными диакритическими знаками (и также со специальными датскими/Шведскими/Норвежскими буквами), которые проблематичны, когда Вы используете \w и \b в Вашем regex. Я могу ожидать, что все небуквы являются нетронутыми прописным модификатором?