문자열의 문자 교체
Sep 11 2020
다음과 같은 문자열이 [TITLE|prefix=a]있습니다..
해당 문자열에서 텍스트 |prefix=a는 동적입니다. 그래서 그것은 아무것도 또는 비어있을 수 있습니다. 나는 (이 경우) 대체하려는 [TITLE|prefix=a]함께 [TITLE|prefix=a|suffix=z].
따라서 아이디어는로 ]시작하는 문자열에서 대체하는 것입니다 [TITLE with |suffix=z].
예를 들어, 문자열이 [TITLE|prefix=a]이면로 바꿔야합니다 [TITLE|prefix=a|suffix=z]. 인 경우 등 [TITLE]으로 교체해야합니다 [TITLE|suffix=z].
RegEx로 어떻게 할 수 있습니까?
이 방법으로 시도했지만 오류가 발생합니다.
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';
const x = 'TITLE';
const regex = new RegExp(`([${x})*]`, 'gi'); str = str.replace(regex, "$1|suffix=z]");
console.log(str);
또한 [및] 문자를 이스케이프하려고 시도했지만 new RegExp(`(\[${x})*\]`, 'gi');도움이되지 않았습니다.
답변
3 WiktorStribiżew Sep 11 2020 at 13:12
\\단일 리터럴 백 슬래시를 정의하려면 일반 문자열 리터럴에서 사용하는 것을 기억해야합니다 .
그런 다음 다음과 같은 패턴이 필요합니다.
/(\[TITLE(?:\|[^\][]*)?)]/gi
regex 데모를 참조하십시오 . 세부:
(\[TITLE\|[^\][]*)-캡처 그룹 1 :\[TITLE-[TITLE텍스트(?:\|[^\][]*)?-|문자 의 선택적 발생과 그 뒤에]및 이외의 0 개 이상의 문자[
]-]문자.
JavaScript 코드 내에서 다음을 사용하여 동적 패턴을 정의합니다.
const regex = new RegExp(`(\\[${x}\\|[^\\][]*)]`, 'gi');
JS 데모보기 :
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur] [TITLE]';
const x = 'TITLE';
const regex = new RegExp(`(\\[${x}(?:\\|[^\\][]*)?)]`, 'gi');
str = str.replace(regex, "$1|suffix=z]");
console.log(str);
// => Lorem ipsum [TITLE|prefix=a|suffix=z] dolor [sit] amet [consectetur]
nemoinho Sep 11 2020 at 13:16
문제에 대한 해결책은 다음과 비슷할 것이라고 생각합니다.
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';
str = str.replace(/(\[[^\|\]]+)(\|[^\]]*)?\]/g, "$1$2|suffix=z]");
console.log(str);