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

时间:2013-06-12 19:48:20

标签: javascript regex

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

@[10] or @[15]

经过我的努力,我想出了这个:

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

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

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

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

但这些都没有匹配。

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

abxdcs@[13]fsfs

提前致谢。

3 个答案:

答案 0 :(得分:1)

使用正则表达式:

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

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

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

Testing code (click here for demo):

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

答案 1 :(得分:0)

字符类中不需要这么多字符。更重要的是,你把+放在错误的地方。试试这个:@\\[([0-9]+)\\]

答案 2 :(得分:0)

你很接近,但你需要使用方括号:

@\[[0-9]+\]

或者,更短的版本:

@\[\d+\]

你需要这些斜线的原因是“逃避”方括号。通常它们用于表示“character class”。

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

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

<强>的javascript

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

变成:

<强>正则表达式

@\[\d+\]

用于匹配:

  

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

我说\d 几乎[0-9]相同,因为在某些正则表达式(including .NET)中,\d实际上会匹配数字来自其他文化的数字以及0-9。