繁体   English   中英

正则表达式匹配@,后跟包含数字的方括号

[英]Regex to match @ followed by square brackets containing a number

我想使用javascript解析类似于此的模式:

@[10] or @[15]

经过我的所有努力,我想到了:

@\\[(.*?)\\]

这种模式可以正常工作,但问题是它与那些方括号黑白匹配。 我希望它只匹配数字。 我也尝试过这些:

@\\[(0-9)+\\]

@\\[([(0-9)+])\\]

但是这些都没有。

另外,我只想匹配完全是单词而不是字符串中单词一部分的模式。 即,如果脚本没有开始或结束,则应该在两侧都包含空格。 这意味着它不应该匹配这样的短语:

abxdcs@[13]fsfs

提前致谢。

使用正则表达式:

/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g

如果模式( @[number] )不是单词的一部分,它将匹配。 如果不是字符串的开始或结尾,则应该在两侧都包含空格。

它使用组,因此如果需要数字,请使用组1。

测试代码(单击此处查看演示):

console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("@[10]")); // true
console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("@[15]")); // true
console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("abxdcs@[13]fsfs")); // false
console.log(/(?:^|\s)@\[([0-9]+)\](?=$|\s)/g.test("abxdcs @[13] fsfs")); // true

var r1 = /(?:^|\s)@\[([0-9]+)\](?=$|\s)/g
var match = r1.exec("@[10]");
console.log(match[1]); // 10

var r2 = /(?:^|\s)@\[([0-9]+)\](?=$|\s)/g
var match2 = r2.exec("abxdcs @[13] fsfs");
console.log(match2[1]); // 13

var r3 = /(?:^|\s)@\[([0-9]+)\](?=$|\s)/g
var match3;
while (match3 = r3.exec("@[111] @[222]")) {
    console.log(match3[1]);
}
// while's output: 
// 111
// 222

字符类内不需要那么多字符。 更重要的是,您将+放在错误的位置。 试试这个: @\\\\[([0-9]+)\\\\]

您距离很近,但是需要使用方括号:

@\[[0-9]+\]

或者,较短的版本:

@\[\d+\]

您需要这些斜杠的原因是“转义”方括号。 通常,它们用于表示“ 字符类 ”。

[0-9]创建一个字符类,该字符类与0到9范围内的一位数字完全匹配。添加+会将含义更改为“一个或多个”。 \\d只是[0-9]简写。

当然,反斜杠字符也用于转义javascript字符串内的字符,这就是为什么必须转义它们的原因。 所以:

javascript

"@\\[\\d+\\]"

变成:

正则表达式

@\[\d+\]

用于匹配:

@文字“ @”符号
\\[文字“ [”符号
\\d+一个或多个数字(与[0-9]+几乎相同)
\\]文字“]”符号

我说\\d 几乎[0-9]相同,因为在某些正则表达式中( 包括.NET ), \\d实际上会匹配除0-9之外的其他区域性的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM