我需要在javascript中使用正则表达式,在string类似的情况下会失败:
foo[ bar]
foo[bar ]
foo[ bar ]
foo
可以是任何字词(也可以包含-
和.
的特殊字符),同样适用于bar
。
如果字符串只是:
,它不会失败[ bar]
[bar ]
[ bar ]
如果字符串是:
,则不应该失败foo[bar]
一些背景信息。我正在编写一个自定义的linter规则,如果引用的数组在括号中有不需要的空格,它将失败。非常感谢任何帮助。
这是我到目前为止(Regex101):
\[([^\]]+)\]
但这会抓住整个括号并且不会评估开头(它应该在此之前)。此外,它应该只评估空格的存在。
答案 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
:
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;