我需要从一段文字中提取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 + ...主要的现代浏览器。
答案 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