2011-08-07 9 views
0

은 내가 그 변수를 절 "이름"및 "텍스트"를 식별하고 끌어 정규식 구축을 위해 노력하고REGEX 도움말, 변수 이름 애프터 =

[QUOTE=Name;123]Text[/QUOTE] 

이 텍스트 블록을 서명합니다.

이것은 모두 javascript str.replace 함수로 들어가지만 작동 시간은 아주 길어집니다.

아이디어가 있으십니까?

감사합니다. 에서

답변

0

아래 대체 할 것입니다 :

var string = "[QUOTE=Name;123]Text[/QUOTE]"; 
var search = /\[QUOTE=(.*?);\d+\]([\s\S]*?)\[\/QUOTE\]/i; 
var replacement = "Quoted by $1: $2"; 
var result = string.replace(re, replacement); 
// result becomes "Quoted by Name: Text" 
  • 는 대소 문자를 구분이다 [quote=user;1]text[/quote][QUOTE=user;1]text[/QUOTE]
  • 이 자리에서 ; 다음과 일치뿐만 아니라 일치하지만, 그것을 무시합니다.
  • 여러 줄에 걸쳐 일치합니다. .은 개행과 일치하지 않으므로 모든 문자를 일치 시키려면 [\s\S]을 사용했습니다.
  • "사용자"와 "텍스트"는 모든 문자 (공백 문자도 포함)와 일치합니다. "사용자"가 문자, 숫자 및 공백으로 만 구성된 경우 .*?[a-z0-9 ]*으로 바꿉니다. 사용자 이름 길이가 3에서 20 사이 인 경우 다음을 사용할 수 있습니다. [a-z0-9 ]{3,20}

이 RE는 매우 간단하며 중첩 된 따옴표로는 작동하지 않습니다. 정규식을 사용하는 HTML 구문 분석과 마찬가지로 BB 코드를 올바르게 변환하는 단일 RE를 작성하는 것은 불가능합니다. 태그를 올바르게 닫을 수 있도록 태그 열기와 닫기 태그를 검색하는 실제 BB 코드 파서를 사용하십시오.

+0

이름 뒤에 123을 쓰면 어쨌든 세미콜론과 숫자가 제외됩니다. – Mark

2
"[QUOTE=Name;123]Text[/QUOTE]".match(/\[QUOTE=(.*);.*\](.*)\[\/QUOTE\]/) 

결과 :

["[QUOTE=Name;123]Text[/QUOTE]", "Name", "Text"] 

은 기본적으로 당신이 그들을 구문 분석하는 (.*)으로 변수를 대체하고 특수 문자를 이스케이프해야합니다.

것은 당신이 할 수있는 그들을 제거 할 때 :

"[QUOTE=Name;123]Text[/QUOTE]".replace(/\[QUOTE=.*;.*\].*\[\/QUOTE\]/, "[QUOTE=;123][/QUOTE]") 
0

이 시도 (가정 이름을, 텍스트는 영숫자) : 귀하의 요구 사항에 따라

\[QUOTE=(\w+);123\](\w+)\[/QUOTE\] 

var re = /\[QUOTE=(\w+);123\](\w+)\[\/QUOTE\]/; 
var str = "[QUOTE=Name;123]Text[/QUOTE]"; 
var newstr = str.replace(re, "$1 - $2"); // $2 is text, $1 is name 

편집 교체 문자열입니다.