2013-09-27 75 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 但不行! –