문자열의 문자 교체

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);