2014-11-07 2 views
0
var quote = 'some text here [[quote=bob]This is some text bob wrote[/quote]] other text here'; 

나는 [[quote=bob]This is some text bob wrote[/quote]]를 얻기 위해 노력하고있어.자바 스크립트 정규식 일치 [[견적] [/ 인용]

내가 사용하던 : 시도 match(/[[quote=(.*?)](.*?)[/quote]]/)[1]

를하지만 나에게 some text here [[quote=bob]This is some text bob wrote[/quot

+1

'quote.match (. *?) \ [인용문]] /) [0]' – j08691

+0

[당신은 구문 분석 할 수 없습니다 (X) 정규식 HTML] (http://stackoverflow.com/a/1732454/1529630). 귀하의 언어가 충분히 복잡한 경우 귀하의 사례에도 해당 될 수 있습니다. – Oriol

+1

@Oriol - 해당 문자열에 HTML이 보이지 않습니다. – j08691

답변

3

을 제공이 :

var quote = 'some text here [[quote=bob]This is some text bob wrote[/quote]] other text here'; 

console.log(quote.match(/(\[\[quote=(.*?)\](.*?)\[\/quote\]\])/)); 
// [1] => "[[quote=bob]This is some text bob wrote[/quote]]" 
// [2] => "bob" 
// [3] => "This is some text bob wrote" 
+0

여기서'. *'를 사용하는 것은 안전하지 않습니다. 정규 표현식은 가능한 한 가장 긴 일치를 발견 할 것이므로 다른 문자열을 사용하면 나쁜 결과를 얻습니다 :''여기에 몇 개의 텍스트 [[quote = bob] 이것은 다른 텍스트를 여기에 쓰는 텍스트 밥입니다. match (/ .* (\ [\ [quote =. *? \]. *? \ [\/quote \] \]) /); ''[: quote]]] [: quote =]이 텍스트의 일부입니다. [[quote = bob]이 텍스트는 bob이 쓴 것입니다.]] [] – Johnride

+1

@Johnride'. *'는'. *?'이 아니라 그것을한다. –

+1

그게 내가 몰랐던 그거야. '?'는'+'와'*'를 비 탐욕적인 성냥으로 바꾼다. 좋은 것. 여기 내 upvote 가져 가라. – Johnride

1

문제는 여기에 당신이 탈출해야한다, 그래서 [가 예약 된 문자가 정규 표현식에 있다는 것입니다 그것을 "정규"문자로 사용하십시오.

여기가 시작입니다. 변수 견적에서 [quote = bob]과 일치합니다. 여기

quote.match(/\[quote=[a-z]*\]/)

은 완전하고 정확하고 안전한 버전입니다.

둘째 결과로 주변 [견적] 태그를 포함하는 적절한 문자열을 반환하고 내부 문자열 만 반환합니다.

= 문자 다음에 어떤 것도 일치시키지 않으려면 [a-z] 문자 클래스를 사용했습니다.