2013-09-27 71 views
2

我嘗試後續串切HTML標籤和包裝HTML標籤再次部件/ 1

<p> 
    string 
    <b> 
     bold 
     <em>italic string</em> 
     also(bold) 
    </b> 
</p> 

轉換爲這個字符串

<p> 
    string 
</p> <!--------------------------------------- insert --> 
    <b> 
     bold 
    </b> <!------------------------------------ insert --> 
     <em>italic string</em> 
    <b> <!------------------------------------ insert -->    
     also(bold) 
    </b> 
<p> <!---------------------------------------- insert --> 
</p> 

我知道這是不合法的HTML,但我需要這個爲我的項目。 ...正則表達式是一種好方法,但我只是沒有解決。

整個謝靈運將是動態的,

我的想法是,正則表達式

// open tag close 
$regex = '<(.*?)>(.*?)</(.*?)>' 

if ($1 != $3) { 
$newString = <$1>$2</$1></$3> 
} 

但不工作!

+3

......究竟是什麼問題? – Rogue

+0

這是一樣的字符串總是還是動態的? – Vishnu

+0

@Rogue我需要在打開或關閉一個antother之前插入動態「TAG-Breakpoint」TAG 要被轉換的字符串istdynamic –

回答

0

好了,一些東西,我覺得作品是兩個連續的替代對象:

$1$2>$3\n$1/$2> 

regex101 demo

1.

^(\s*<(?!/))([^<]+)>(?=[^<]+\n)((?:(?!</\2>)[\s\S])*?)(?=\n *<)(?![^>]*</\2>) 

通過更換

2.

/[^>]+>$\n\K([^<>]*?)(^\s*)(?=</([^>]+)>) 

被替換:

$2<$3>\n$1$2 

regex101 demo

ideone render

我不知道爲什麼ideone轉動<>&lt;&gt;,我不知道如何避免它: (

但適用於您的示例。

+0

感謝您快速反饋,你的權利與示例(參見以上)的作品,但與其他文本(HTML驗證)的作品不是...... 樣本: '

大膽斜體(粗體)

' –

+0

@FooLing你可以把它放在你的問題嗎?在評論中很難閱讀:) – Jerry

+0

我沒有找到這個動作的按鈕;) 我的意思是..你的正則表達式只適用於我的例子,但不適用於另一個(有效的)HTML-Strings –

-1

如果你有一個靜態的字符串,那麼你可以做這樣的JavaScript,

  htmlstring.replace("<b>","</p><b>") 
        .replace("<em>","</b><em>") 
        .replace("</em>","</em><b>") 
        .replace("</b>","</c-b>") 
        .replace("</b>","</b><p>") 
        .replace("</c-b>","</b>"); 

檢查這個http://jsfiddle.net/z5Aba/1/。 (需要檢查的控制檯)

+0

感謝您的反饋,但字符串不是靜態的...它的一個動態生成字符串 –

+0

你的意思是整個結構將是動態的或只是字符串部分像'字符串','粗體'.. –

+0

整個結構將動態的, 我的想法是,正則表達式 <(*.?)>(*。) if $ 1!= $ 3然後 $ newString = <$1> $ 2 但不行! –