Часто нам нужно изменить подстроку с несколькими ключевыми словами, разбросанными по строкам, предшествующим подстроке. Рассмотрим элемент 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")
, и замена работает правильно, как и раньше.
Хотя это очень хорошо, я бы рекомендовал следующее, основываясь на примерах / репозиториях, которые я видел в Интернете.
Во-первых, используя 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;