Javascript 正则表达式空白检测

Javascript Regular Expression Whitespace Detection

我不久前提交了这个 post。
我想进一步加强表情模式。

到目前为止效果很好:

<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>

我现在正在测试白色-space 细微差别。 我应用的模式是:/file="([^"]+)/i 我想在此模式中添加更多内容。

例如:

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

这有效,除非 #includefile.

之间有更多 space

所以我将模式更改为:

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。 但是变量 result 是空的。

我错过了什么?

那是因为你添加了一个组,match返回的数组中索引1处的元素就是这个组(全是空格)

改变

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

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

另一种方法是使用未记住的组 ((?:\s+)),但您根本不需要组。

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

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

Demo

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);
}