JS 正则表达式匹配括号之间的数字
JS Regex match numbers between brackets
我有以下代码,但没有输出。当我 运行 它在这里似乎工作:
https://regex101.com/r/FVkJfF/1
var strng = '[,][123,1][,][456,2][,][789,3][,][,][,][,][,][,][,][,]';
var rgx = \[(.[0-9,]+)\];
var outstr = strng.match(rgx).join(',');
Write(outstr);
为了澄清,我的目标是捕获括号之间的所有值,如果它们包含数字(包括该组的左括号和右括号)
猜猜我哪里做错了什么?
试试这个:
/\[\d+,\d+\]/g
它匹配一个子字符串,如果它包含:
- 左括号
- 一个整数
- 逗号
- 另一个整数
- 右括号
…按照这个顺序,没有任何空格。
另请注意,正则表达式文字以 /
开头。您在代码段中定义 var rgx
的方式是 SyntaxError
您的正则表达式模式似乎不正确。 Javascript 要求您在正则表达式中使用方括号时正确转义方括号。
这应该是您的正则表达式模式:
const rgx = /\[(.[0-9,]+)\]/gm;
这可以通过
进一步简化
const rgx = /\[(.[\d,\d]+)\]/gm;
但是,您无法使用 join
方法实现您想要的结果,因为 match
不是 return 数组,而是第一个匹配项,所以您不能连接单个元素。看看matchAll
方法。
您需要更改正则表达式
\[(?:\d+,\d+)+\]
使用简单
/\[(\d[\d,]*)]/g
解释
--------------------------------------------------------------------------------
\[ '['
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
\d digits (0-9)
--------------------------------------------------------------------------------
[\d,]* any character of: digits (0-9), ',' (0
or more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
] ']'
const regex = /\[(\d[\d,]*)]/g;
const str = `[,][123,1][,][456,2][,][789,3][,][,][,][,][,][,][,][,]`;
let m;
while ((m = regex.exec(str)) !== null) {
console.log(m[0]);
}
用至少一个逗号匹配方括号之间的所有数字,但没有连续的逗号,例如 1,,2
:
\[\d+(?:,\d+)+]
说明
\[
匹配 [
\d+
匹配 1+ 个数字
(?:,\d+)+
重复 1+ 次匹配 ,
和 1+ 数字
]
匹配 ]
const regex = /\[\d+(?:,\d+)+]/g;
[
"[,][123,1][,][456,2][,][789,3][,][,][,][,][,][,][,][,]",
"[123,1,2,34]",
"[123,1,2]",
"[123]",
"[]",
"[1,,2]",
"[,1,2]"
].forEach(s => Array.from(s.matchAll(regex), m => {
if (m) {
console.log(m[0]);
}
}));
我有以下代码,但没有输出。当我 运行 它在这里似乎工作:
https://regex101.com/r/FVkJfF/1
var strng = '[,][123,1][,][456,2][,][789,3][,][,][,][,][,][,][,][,]';
var rgx = \[(.[0-9,]+)\];
var outstr = strng.match(rgx).join(',');
Write(outstr);
为了澄清,我的目标是捕获括号之间的所有值,如果它们包含数字(包括该组的左括号和右括号)
猜猜我哪里做错了什么?
试试这个:
/\[\d+,\d+\]/g
它匹配一个子字符串,如果它包含:
- 左括号
- 一个整数
- 逗号
- 另一个整数
- 右括号
…按照这个顺序,没有任何空格。
另请注意,正则表达式文字以 /
开头。您在代码段中定义 var rgx
的方式是 SyntaxError
您的正则表达式模式似乎不正确。 Javascript 要求您在正则表达式中使用方括号时正确转义方括号。 这应该是您的正则表达式模式:
const rgx = /\[(.[0-9,]+)\]/gm;
这可以通过
进一步简化const rgx = /\[(.[\d,\d]+)\]/gm;
但是,您无法使用 join
方法实现您想要的结果,因为 match
不是 return 数组,而是第一个匹配项,所以您不能连接单个元素。看看matchAll
方法。
您需要更改正则表达式
\[(?:\d+,\d+)+\]
使用简单
/\[(\d[\d,]*)]/g
解释
--------------------------------------------------------------------------------
\[ '['
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
\d digits (0-9)
--------------------------------------------------------------------------------
[\d,]* any character of: digits (0-9), ',' (0
or more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
] ']'
const regex = /\[(\d[\d,]*)]/g;
const str = `[,][123,1][,][456,2][,][789,3][,][,][,][,][,][,][,][,]`;
let m;
while ((m = regex.exec(str)) !== null) {
console.log(m[0]);
}
用至少一个逗号匹配方括号之间的所有数字,但没有连续的逗号,例如 1,,2
:
\[\d+(?:,\d+)+]
说明
\[
匹配[
\d+
匹配 1+ 个数字(?:,\d+)+
重复 1+ 次匹配,
和 1+ 数字]
匹配]
const regex = /\[\d+(?:,\d+)+]/g;
[
"[,][123,1][,][456,2][,][789,3][,][,][,][,][,][,][,][,]",
"[123,1,2,34]",
"[123,1,2]",
"[123]",
"[]",
"[1,,2]",
"[,1,2]"
].forEach(s => Array.from(s.matchAll(regex), m => {
if (m) {
console.log(m[0]);
}
}));