[英]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.