0

我需要从一段文本中提取 3 个字段。我有一个正则表达式,可以提取其中的 2 个字段 - 文件和扩展名。我不知道如何提取内容文本,也没有匹配除“非模式”之外的所有字符的策略。

模式是:var regex_file = /<!--<\|(.*)\.(.*)\|>-->/g,

另外,我不确定正则表达式是最好的方法。我考虑了字符串方法拆分:split(regex_file)

但我认为没有办法让分隔符保持分裂。它只是返回分隔符之间的内容。另外,我认为没有办法split()像我在exec()下面那样循环。

从以下结构中的文本中提取这 3 个字段的最佳方法是什么。下面是我到目前为止所拥有的。

文本结构

<!--<|file.extension|>-->

// 1-10k of content text

<!--<|file.extension|>-->

// 1-10k of content text

<!--<|file.extension|>-->

// 1-10k of content text

第一次尝试

    /*addNodes
    **
    **
    **
    */
    function addNodes(text) {
        var regex_file = /<!--<\|(.*)\.(.*)\|>-->/g,
            arr_file;

        while ((arr_file = regex_file.exec(text)) !== null) {
            arr_file[1] // holds file 
            arr_file[2] // holds extension
            arr_file[3] // need content here
        }
    }

附加标准:

IE10+、FF10+、Safari5+、Chrome20+...主要的现代浏览器。

4

2 回答 2

1

是的,有一种方法可以循环split()

使用java你可以这样做:

public static void main(String[] args) {
    String text = "<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text";
    String reg = "(?=\\n<!--<\\|[^<]*\\.[^>]*\\|>-->)";
    String[] split = text.split(reg);
    System.out.println(Arrays.toString(split));
}

输出

[<!--<|file.extension|>--> 
 1-10k of content text , 
<!--<|file.extension|>--> 
 1-10k of content text , 
<!--<|file.extension|>--> 
 1-10k of content text]

java脚本:

<html>
<body>
    <button onclick="myFunction()">Try it</button>
    <script>

    function myFunction(){
        var reg = /(?=\n<!--<\|[^<]*\.[^>]*\|>-->)/;
        var text = "<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text";
        var n= text.split(reg);
        alert(n);
    }
    </script>
</body>
</html>
于 2012-12-31T02:41:29.503 回答
1

你非常接近。分隔符可以用正则表达式保存:

s = "<!--<|file.extension|>--> // 1-10k of content text <!--<|file.extension|>--> // 1-10k of content text <!--<|file.extension|>--> // 1-10k of content text"
a = s.split(/<!--<\|([^.]*)(\.[^|]*)\|>-->/g)
for (i = 1; i < a.length; i += 3) {
  console.log('result:');
  console.log('  "'+a[i]  +'"');
  console.log('  "'+a[i+1]+'"');
  console.log('  "'+a[i+2]+'"');
}

输出:

result:
  "file"
  ".extension"
  " // 1-10k of content text "
result:
  "file"
  ".extension"
  " // 1-10k of content text "
result:
  "file"
  ".extension"
  " // 1-10k of content text"

我能够在 Windows 上成功手动测试 ie9、chrome23 和 osx10 上的 chrome23、safari6、ff6。

我还把它扔到了 browsershots.org 上,这些版本的执行成功了:

火狐:3.6.27 4.0.1 5.0.1 1.5.0.12 10.0.2 6.0.1 11.0 11.0 12.0 13.0 14.0.1 17.0 7.0.1 15.0 16.0 2.0.0.20 8.0.1 9.0.1 18.0 172.0 18.0 172.0 1.6.6 .1 10.0.2 17.0 6.0.2 7.0.1 8.0 12.0 14.0.1 13.0.1 4.0.1 15.0 5.0.1 3.0.10 19.0 18.0

微星:10.0

野生动物园:3.2.3 5.1.7 5.1.7 6.0 5.0

CHROME:7.0.517.44 23.0.1271.101 17.0.963.56 8.0.552.224 17.0.963.56 22.0.1229.26 23.0.1251.2 22.0.1312.45 9.0.597.45 9.0.597.107 11.0.696.77 10.0.612.1 12.0.742.112 13.0.782.18 14.0.835.202 15.0.874.106 18.0.874.106 18.0.835.202 15.0.835.202 15.0.874.106 18.0.835.202 15.0.874.191112 19.0.1041.0 20.0.1132.57 21.0.1180.89 24.0.1312.45 23.0.1271.97 16.0.912.77 2.0.172.31 6.0.472.63

它不成功: chrome 20.0.1132.47 on ubuntu-12.04-lts

或 msie < 10 的版本

于 2012-12-31T03:15:05.707 回答