我不久前提交了这篇Extract String RegEx Question帖子 我想更多地增强表达模式。
到目前为止,这很有效:
<script>
// extract the inc/funcs.asp from the variable.
var text = '<!-- #include file="inc/funcs.asp" -->';
var pattern = /file="([^"]+)/i
var result = (text.match(pattern) || ['', ''])[1];
console.log(result); // returns: inc/funcs.asp
</script>
我现在正在测试白空间的细微差别。 我正在应用的模式是:/ file =“([^”] +)/ i 我想为这种模式添加更多内容。
例如:
var pattern = /#include file="([^"]+)/i
这是有效的,除非 #include 和文件之间有更多空间。
所以我将模式改为:
var pattern = /#include(\s+)file="([^"]+)/i
完整脚本:
<script>
var text = '<!-- #Include File="inc/funcs.asp" -->';
var pattern = /#include(\s+)file="([^"]+)/i
var result = (text.match(pattern) || ['', ''])[1];
var count = result.length;
if(count > 0){
console.log(result);
}
</script>
count 变量大于0,并运行console.log
。
但变量结果为空。
我缺少什么?
答案 0 :(得分:1)
从()
移除\s+
的捕获组 - regex
。否则,它总是返回result
数组中的空格。
var pattern = /#include\s+file="([^"]+)/i;
var text = '<!-- #Include File="inc/funcs.asp" -->';
var pattern = /#include\s+file="([^"]+)/i;
var result = (text.match(pattern) || ['', ''])[1];
if (result.length > 0) {
alert(result);
}
&#13;
答案 1 :(得分:0)
那是因为你添加了一个组,match
返回的数组中索引为var pattern = /#include(\s+)file="([^"]+)/i
的元素就是这个组(满空格)。
更改
var pattern = /#include\s+file="([^"]+)/i
到
(?:\s+)
另一种方法是使用非记忆组(@Path("incidences")
public class IncidencesResource {
@InjectParam
IncidencesService incidencesService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Incidence> getIncidences(
@QueryParam("lastupdate") String lastUpdate) {
return incidencesService.getIncidences();
}
),但根本不需要组。