我想使用javascript解析与此类似的模式:
@[10] or @[15]
经过我的努力,我想出了这个:
@\\[(.*?)\\]
这种模式工作正常,但问题是它与那些方括号匹配任何东西。我希望它只匹配数字。我也尝试过这些:
@\\[(0-9)+\\]
和
@\\[([(0-9)+])\\]
但这些都没有匹配。
另外,我想只匹配完整单词的模式而不是字符串中单词的一部分。即如果它没有开始或结束脚本,则应该包含两侧的空格。这意味着它不应该像这样的短语匹配:
abxdcs@[13]fsfs
提前致谢。
答案 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。