Реагируйте на машинопись правильно, чтобы набрать FunctionComponent

Часто нам нужно изменить подстроку с несколькими ключевыми словами, разбросанными по строкам, предшествующим подстроке. Рассмотрим элемент xml:

<TASK>
  <UID>21</UID>
  <Name>Architectural design</Name>
  <PercentComplete>81</PercentComplete>
</TASK>

Предположим, мы хотим изменить 81, на какое-то другое значение, скажем 40. Сначала определите .UID.21..UID., затем пропустите все символы, включая \n до .PercentCompleted.. Шаблон регулярного выражения и спецификация замены:

String hw = new String("<TASK>\n  <UID>21</UID>\n  <Name>Architectural design</Name>\n  <PercentComplete>81</PercentComplete>\n</TASK>");
String pattern = new String ("(<UID>21</UID>)((.|\n)*?)(<PercentComplete>)(\\d+)(</PercentComplete>)");
String replaceSpec = new String ("$1$2$440$6");
//note that the group (<PercentComplete>) is $4 and the group ((.|\n)*?) is $2.

String  iw = hw.replaceFirst(pattern, replaceSpec);
System.out.println(iw);

<TASK>
  <UID>21</UID>
  <Name>Architectural design</Name>
  <PercentComplete>40</PercentComplete>
</TASK>

Подгруппа (.|\n), вероятно, является отсутствующей группой $3. Если мы сделаем его не захватывающим с помощью (?:.|\n), то $3 будет (<PercentComplete>). Таким образом, шаблон и replaceSpec также могут быть:

pattern = new String("(<UID>21</UID>)((?:.|\n)*?)(<PercentComplete>)(\\d+)(</PercentComplete>)");
replaceSpec = new String("$1$2$340$5")

, и замена работает правильно, как и раньше.

0
задан user3887366 3 March 2019 в 10:59
поделиться

1 ответ

Хотя это очень хорошо, я бы рекомендовал следующее, основываясь на примерах / репозиториях, которые я видел в Интернете.

Во-первых, используя interface вместо type

interface ModalProps {
  children: ReactElement<any>;
  show: boolean;
  modalClosed(): void;
}

Это облегчает расширение вашего интерфейса. Например, при использовании MaterialUI

interface ModalProps extends WithStyles<typeof modalStyles> {
  children: ReactElement<any>;
  show: boolean;
  modalClosed(): void;
};

и Second, я видел следующий способ ввода функциональных компонентов больше, чем что-либо еще, хотя я не уверен, что за этим стоит веская причина.

const modal = ({
  children,
  modalClosed,
  show
} : ModalProps) => (
  <Aux>
    <Backdrop show={show} clicked={modalClosed} />
    <div>{children}</div>
  </Aux>
);

РЕДАКТИРОВАТЬ : Последнее, что я должен добавить, - это также то, что является скорее стандартом, чем правилом - способ объявления функций.

modalClosed: () => void;
0
ответ дан ManavM 3 March 2019 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: