2010-12-04 9 views
1

JQuery MarkItUp을 사용하는 기능을 사용하고 있습니다! 편집기를 BBCode 편집기로 사용합니다. 난 단지 다음과 같은 BBCodes의 작은 부분 집합을 허용하고 있습니다 : 문자열에서 BBCode 태그를 제거하는 RegEx

[b] 
[i] 
[quote] 
[quote=Mr Incredible] 
[img] 
[url] 
[youtube] 

내가 편집기를 사용하는 1,500 문자 "설명"필드를 가지고 있지만, 나는 또한 가의 다이제스트 150 문자를 저장하기 위해 계획입니다 모든 BBCode가있는 설명이 제거되었습니다.

저는 현재 C#에서 이것을 수행하는 간단한 RegEx를 사용하고 있습니다. 그것은 기본적으로 문자열에 내장 된 BBCode를 핵무기로 만들지 만 [img] URL이나 내가 또한 다이제스트에서 제거하고 싶은 [youtube] 비디오 ID와 같이 "시끄러운 내용"을 많이 남깁니다.

여기에 내 현재 정규식입니다 :

public static String StripBBCode(string bbCode) 
    { 
    string r = Regex.Replace(bbCode, 
    @"\[(.*?)\]", 
    String.Empty, RegexOptions.IgnoreCase); 

    // Finally, replace all newlines with a space 
    r = Regex.Replace(r, 
    @"(\r\n|\n\r|\r|\n)+", 
    @" ", RegexOptions.IgnoreCase); 

    return r; 
    } 

나는이 기능을 통해 다음과 같은 문자열을 실행하면, 나는 결과는 다음과 같이 얻을 :

소스를

This is [b]bold[/b]. This is [i]italic[/i]. 

Here is an image: 
[img]http://www.phatmac.com/Pics/Movies/Incredibles.jpg[/img] 

Here is a link to [url=http://espn.go.com]ESPN[/url]. 

Here is a YouTube video: 

[youtube]WJ0UkZ3W4FA[/youtube] 

결과

이것은 굵은 글씨입니다. 이탤릭체입니다. 여기 이미지가 있습니다 : http://www.phatmac.com/Pics/Movies/Incredibles.jpg 다음은 ESPN에 대한 링크입니다. 여기에 YouTube 동영상은 다음과 같습니다 WJ0UkZ3W4FA

여기에 내가이 굵게 다시

싶어거야. 이탤릭체입니다. 다음은 이미지입니다. 여기 ESPN에 대한 링크가 있습니다. 다음은 YouTube 동영상입니다.

어떻게하면 StripBBCode() 함수를 수정할 수 있습니까? 첫 번째 대답은 아래 데이비드에서

제안 편집을 할

정확했다.

여기에 내가 지금 사용하고있는 작업은 다음과 같습니다

string r = Regex.Replace(s, 
    @"\[youtube\].*\[\/youtube\]", 
    String.Empty, RegexOptions.IgnoreCase); 

r = Regex.Replace(r, 
    @"\[img\].*\[\/img\]", 
    String.Empty, RegexOptions.IgnoreCase); 

답변

2

당신이 제거 된 컨텐츠를 원하는 여러 태그를 얻고, 한 경우에만 제거 태그를 원하는 나머지.

[img].*[/img]을 string.empty 및 [youtube].*[/youtube]으로 바꾸고 내용을 제거해야하는 항목이 있으면 [.*]을 제거하십시오.

편집 :

는 나도 정규식 전문가는 아니지만 @"\[img\].*?\[/img\]" 당신이 원하는 것을 생각합니다. @"\[(.*?)\]"에 괄호가 필요하다고 생각하지 않습니다.이 컨텍스트에서 괄호는 일치하는 텍스트를 저장하여 다시 \1과 일치시킬 수 있다고 생각합니다.

+0

[img]. * [/ img]을 (를) 제거하는 RegEx는 어떻게 생겼습니까? 나는 RegEx maven이 아니며, 함수 내에서 원래의 정규 표현식은 구문을 바르게 처리하기위한 많은 잘라 붙이기 세션의 결과였다. –

+0

감사.나는 원래 질문의 끝에 추가 된 버전을 가지고있는 것으로 보인다. 내 물건에는 당신 물음표가 묻혀 있지 않습니다. 어쨌든, 올바른 방향으로 나를 가르쳐 주셔서 감사합니다. 감사합니다! –

+0

'. *? '의 물음표는 해당 표현식을 게으르게 만들어 표현을 만족시키는 데 필요한 최소 문자 수를 소비합니다. 그것없이 정규 표현은'[img] asdf [/ img] 중요 텍스트 [img] asdf [/ img]'를 빈 문자열로 줄입니다. –

관련 문제