用于捕获方括号之间的起始和结束空格的正则表达式

时间:2018-05-15 10:04:42

标签: javascript regex

我需要在javascript中使用正则表达式,在string类似的情况下会失败:

foo[ bar]
foo[bar ]
foo[ bar ]

foo可以是任何字词(也可以包含-.的特殊字符),同样适用于bar

如果字符串只是:

,它不会失败
[ bar]
[bar ]
[ bar ]

如果字符串是:

,则不应该失败
foo[bar]

一些背景信息。我正在编写一个自定义的linter规则,如果引用的数组在括号中有不需要的空格,它将失败。非常感谢任何帮助。

这是我到目前为止(Regex101):

\[([^\]]+)\]

但这会抓住整个括号并且不会评估开头(它应该在此之前)。此外,它应该只评估空格的存在。

3 个答案:

答案 0 :(得分:1)

有点平凡但是:

var rgx = /^(?:\w|[_\-.])+?\[(?:\w|[_\-.])+\]|^\[\s*(?:\w|[_\-.])+\s*\]/gi;

似乎适用于您的案例:

var rgx = /^(?:\w|[_\-.])+?\[(?:\w|[_\-.])+\]|^\[\s*(?:\w|[_\-.])+\s*\]/i;
["foo[ bar]","foo[bar ]","foo[ bar ]","[ bar]","[bar ]","[ bar ]","foo[bar]"]
.forEach(function(d,i){console.log(rgx.test(d))});
    //false x 3
    //true x 4

答案 1 :(得分:1)

似乎你只想匹配1)在(之前有1个或多个字符的字符串,并且2)在[之后或]之前有空格。

您可以使用

/\w+\[(\s[^\]]*|[^\]]*\s)]/

请参阅regex demo

<强>详情

  • \w+ - 一个或多个单词字符
  • \[ - [
  • (\s[^\]]*|[^\]]*\s) - 两种选择中的任何一种:
    • \s[^\]]* - 一个空格字符后跟0 {+ 1}}以外的字符
    • ] - 或
    • | - 除了[^\]]*\s以外的0个字符,后面跟一个空格字符
  • ] - ]字符。

JS演示:

]

答案 2 :(得分:1)

您可以尝试/\[\s+[a-zA-Z0-9._]|[a-zA-Z0-9._]\s+\]/g

&#13;
&#13;
function test(str){
  var regex = /\[\s+[a-zA-Z0-9._]|[a-zA-Z0-9._]\s+\]/g;
  if(str.match(regex))
   return 'Passed';
  else
    return 'Failed';
}

//Passed
console.log(test('foo[ bar]'));
console.log(test('foo[bar ]'));
console.log(test('foo[ bar ]'));
console.log(test('foo[.bar ]'));
console.log(test('foo[ bar- ]'));
//Failed
console.log(test('foo[bar]'));
&#13;
&#13;
&#13;