我有字符串:
123 df456 555 [ 789 ] [abc 1011 def ] [ ghi 1213] [jkl mno 1415 pqr] 161718 jkl 1920
我只需要获取不在square brackets [ ]
之间的数字。
我需要在square brackets [ ]
内放置的所有结果数字
正确的结果应该是:
[123] df456 [555] [ 789 ] [abc 1011 def ] [ ghi 1213] [jkl mno 1415 pqr] [161718] jkl [1920]
我试过编写这样的JavaScript正则表达式:
/(?!\[(.*?)\])((\s|^)(\d+?)(\s|$))/ig
但似乎是错误的,似乎积极的前瞻优先于消极的前瞻。
答案 0 :(得分:2)
假设方括号是平衡的和非嵌套的,您还可以使用负前瞻来抓取[...]
之外的数字:
var str = '1232 [dfgdfgsdf 45] 1234 [ blabla 101112 ] 67890 [113141516 ] bla171819 212123';
var re = /\b\d+\b(?![^[]*\])/g;
var repl = str.replace(re, "[$&]");
console.log(repl);
//=> [1232] [dfgdfgsdf 45] [1234] [ blabla 101112 ] [67890] [113141516 ] bla171819 [212123]
此正则表达式匹配前面没有]
的任何数字,而不匹配[
。
RegEx分手:
\b # word boundary
\d+ # match 1 or more digits
\b # word boundary
(?! # negative lookahead start
[^[]* # match 0 or more of any character that is not literal "["
\] # match literal ]
) # lookahead end
答案 1 :(得分:1)
匹配[
和]
之间的所有子字符串并匹配并捕获其他全字(字边界内):
/\[[^\][]*\]|\b(\d+)\b/g
请参阅下面的regex demo和演示代码。
详细:
\[[^\][]*\]
- [
,然后是[
和]
以外的0 +字符,以及]
|
- 或\b
- 领先的字边界(\d+)
- 第1组捕获一个或多个数字\b
- 尾随字边界/g
- 全局,预计会出现多次
var regex = /\[[^\][]*\]|\b(\d+)\b/ig;
var str = '1234 [ blabla 101112 ] 67890 [113141516 ] bla171819 212123';
var res = [];
while ((m = regex.exec(str)) !== null) {
if (m[1]) res.push(m[1]);
}
console.log(res);

答案 2 :(得分:1)
我会寻找并删除方括号分隔的子串,然后匹配所有有界的数字字符串......就像这样:
var string = '1234 [ blabla 101112 ] 67890 [113141516 ] bla171819 212123';
string.replace(/\[.+?\]/g, '').match(/\b\d+\b/g);
// => ["1234", "67890", "212123"]
答案 3 :(得分:1)
可能你可以这样做;
var str = "1234 [ blabla 101112 ] 67890 [113141516 ] bla171819 212123",
result = str.match(/\d+(?=\s*\[|$)/g);
console.log(result);
\d+(?=\s*\[|$)