Javascript正则表达式空白检测

时间:2015-07-22 09:27:04

标签: javascript jquery regex whitespace

我不久前提交了这篇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。 但变量结果为空。

我缺少什么?

2 个答案:

答案 0 :(得分:1)

()移除\s+的捕获组 - regex。否则,它总是返回result数组中的空格。

var pattern = /#include\s+file="([^"]+)/i;

Demo

&#13;
&#13;
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;
&#13;
&#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(); } ),但根本不需要组。