在Kotlin中将几个<script>标记合并为一个

时间:2017-09-08 07:44:50

标签: regex kotlin

考虑以下HTML代码:

&#xA;&#xA;
 &lt; script&gt; ...&lt; / script&gt;&#xA;&lt; script&gt;。 ..&LT; /脚本&GT;&#XA;&LT; DIV&GT; ...&LT; / DIV&GT;&#XA;&LT;脚本&GT; ...&LT; /脚本&GT;&#XA;&LT;脚本&GT; ... &LT; /脚本&GT;&#XA;&LT;脚本&GT; ...&LT; /脚本&GT;&#XA;&LT;脚本&GT; ...&LT; /脚本&GT;&#XA;&LT;风格&GT; ...&LT; /style>
<script>...</script>
<script>...</script>
;&#xA;

我想将脚本部分合并为一个,如下所示:

&#xA;&#xA;
 &lt; script&gt; ...&lt; / script&gt ;&#XA;&LT; DIV&GT; ...&LT; / DIV&GT;&#XA;&LT;脚本&GT; ...&LT; /脚本&GT;&#XA;&LT;风格&GT; ...&LT; /风格&GT;& #xA;&lt; script&gt; ...&lt; / script&gt;&#xA;  
&#xA;&#xA;

我尝试了这段代码:

& #xA;&#xA;
  while(true){&#xA; val newSource = source.replace(&#xA;“[&lt;] script [&gt;](。*?)[&lt;] / script [&gt;] \\ s * [&lt;] script [&gt;]” &#xA; .toRegex(setOf(RegexOption.MULTILINE,RegexOption.DOT_MATCHES_ALL)),&#xA;“&lt; script&gt; $ 1&lt; / script&gt;”)&#xA;&#xA; if(source.equals(newSource)){&#xA;打破;&#XA; }&#XA; source = newSource&#xA;}&#xA;  
&#xA;&#xA;

它不优雅而且不起作用: - )

&#xA;&# xA;
    &#xA;
  1. 我想避免循环。我可以编写正则表达式来处理整个代码吗?
  2. &#xA;
  3. 这实际上只会导致单个&lt; script&gt; ...&lt; / script&gt; as它将消耗中间的&lt; div&gt; &lt; style&gt; 。我怎样才能禁止包含标签的内容?
  4. &#xA;
&#xA;

1 个答案:

答案 0 :(得分:0)

fun main(args: Array<String>) {
    var source="""
        <script>...</script>
        <script>...</script>
        <div>...</div>
        <script>...</script>
        <script>...</script>
        <script>...</script>
        <script>...</script>
        <style>...</style>
        <script>...</script>
        <script>...</script>
        """
     source = source.replace(
                "[<]/script[>]\\s*[<]script[>]"
                     .toRegex(setOf(RegexOption.MULTILINE, RegexOption.DOT_MATCHES_ALL)), 
                "\n")
     println(source)
}