如何使用正则表达式提取三个文本字段?

时间:2012-12-31 01:47:55

标签: javascript regex

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

模式为: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 + ...主要的现代浏览器。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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上,并且这些版本的执行成功了:

firefox: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 17.0 19.0 3.6。 28 16.0 9.0.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

msie:10.0

safari: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.107 11.0.696.77 10.0.612.1 12.0.742.112 13.0.782.218 14.0.835.202 15.0.874.106 18.0.1025.33 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

它没有成功:   ubuntu-12.04-lts上的chrome 20.0.1132.47

或msie的版本&lt; 10