<script> 在 Kotlin 中将多个标签合并为一个



考虑以下html代码:

<script>...</script>
<script>...</script>
<div>...</div>
<script>...</script>
<script>...</script>
<script>...</script>
<script>...</script>
<style>...</style>
<script>...</script>
<script>...</script>

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

<script>...</script>
<div>...</div>
<script>...</script>
<style>...</style>
<script>...</script>

我尝试了此代码:

while (true) {
    val newSource = source.replace(
                "[<]script[>](.*?)[<]/script[>]\s*[<]script[>]"
                     .toRegex(setOf(RegexOption.MULTILINE, RegexOption.DOT_MATCHES_ALL)), 
                "<script>$1</script>")
    if (source.equals(newSource)) {
        break;
    }
    source = newSource
}

它不优雅,无法正常工作: - )

  1. 我想避免循环。我可以编写正则表达式以处理整个代码吗?
  2. 这实际上只会导致单个<script>...</script>,因为它将在中间消耗<div><style>。我如何禁止包含标签的内容?
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)
}

最新更新