JavaScript正则表达式获取所有数字,但排除括号之间的所有数字
我有字符串:JavaScript正则表达式获取所有数字,但排除括号之间的所有数字,javascript,regex,brackets,Javascript,Regex,Brackets,我有字符串: 123 df456 555[789][abc 1011 def][ghi 1213][jkl mno 1415 pqr]161718 jkl 1920 我只需要得到不放在方括号[]之间的数字。 我需要将所有生成的数字放在方括号内[] 正确的结果应该是: [123]df456[555][789][abc 1011 def][ghi 1213][jkl mno 1415 pqr][161718]jkl[1920] 我尝试过编写这样的JavaScript正则表达式: /(?!\[(.*?
123 df456 555[789][abc 1011 def][ghi 1213][jkl mno 1415 pqr]161718 jkl 1920
我只需要得到不放在方括号[]
之间的数字。
我需要将所有生成的数字放在方括号内[]
正确的结果应该是:
[123]df456[555][789][abc 1011 def][ghi 1213][jkl mno 1415 pqr][161718]jkl[1920]
我尝试过编写这样的JavaScript正则表达式:
/(?!\[(.*?))(\s|^)(\d+?)(\s|$)/ig
但这似乎是错误的,似乎积极的前瞻比消极的前瞻优先级更高。匹配
[
和]
之间的所有子字符串,并匹配和捕获那些是完整单词的其他子字符串(在单词边界内):
请参阅下面的示例代码和演示代码
详情:
-\[^\][*\]
,然后是[
和[
之外的0+字符,以及]
]
-或|
-前导词边界\b
-组1捕获一个或多个数字(\d+)
-尾随词边界\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]);
}
控制台日志(res)代码>我将查找并删除方括号分隔的子字符串,然后对所有有界数字字符串进行匹配。。。大概是这样的:
var string = '1234 [ blabla 101112 ] 67890 [113141516 ] bla171819 212123';
string.replace(/\[.+?\]/g, '').match(/\b\d+\b/g);
// => ["1234", "67890", "212123"]
假设方括号是平衡的和非嵌套的,您还可以使用负前瞻来获取[…]
之外的数字:
var str='1232[dfgdfgsdf45]1234[blabla 101112]67890[113141516]bla171819 212123';
变量re=/\b\d+\b(?![^[]*\])/g;
var repl=str.replace(re,“[$&]”;
console.log(repl);
//=>[1232][dfgdfgsdf 45][1234][blabla 101112][67890][113141516]bla171819[212123]
可能您可以做以下操作
var str=“1234[blabla 101112]67890[113141516]bla171819 212123”,
结果=str.match(/\d+(?=\s*\[\$)/g);
console.log(result);
这里的区别是,如果在[
和]
之间有换行符,则/\[.+?\]/g
将不匹配。这就是为什么我坚持使用否定字符类的原因。这是正确的,在这种情况下,我将用/\[\s]+?\]替换/\[/g
。对不起,还有我需要放在方括号内的结果中的所有数字。最终结果应该是:[1234][blabla 101112][67890][113141516]bla171819[212123]它可以工作!我还修改为将[]添加到“裸”数字中:str4=“1234[Blablabla 101112]67890[113141516]bla171819 2123”;str4.replace(/((\d+)(=\s*[|$)/g,”[1]”;问题似乎完全解决了!但我不理解你的模式:)@Sam Aniston该模式使用了一个向前看的(?=)
。它向前看一个\s*
(0个或更多的空格),后跟一个\[
(右方括号)或
作为行尾$
->(?=\s*\[\124$)
并在全局范围内收集所有小数\d+
。我很高兴你解决了你的问题。这是错误的,如果输入是1234 bla171819[blablabla 101112]67890[113141516]bla171819 212123
@anubhava,给定的字符串模式就是这里的基础。如果你在上应用它,它也会中断。请告诉我[查看1234]如果字符串中的这些数字后面没有空格和方括号,并且这些数字不在字符串的末尾,则6543break“
字符串。\d+(?=\s*\[\124;$)
将不起作用。这种情况(不是出于疑问,但在我的工作中)不起作用(数字嵌套到)):str5=“1232[dfgdfgsdf45]”str5.replace(/\b\d+\b(?![^][]*])/g,“[$1]”;啊,没错,需要一个小调整。现在用正则表达式演示检查我的更新答案。
var string = '1234 [ blabla 101112 ] 67890 [113141516 ] bla171819 212123';
string.replace(/\[.+?\]/g, '').match(/\b\d+\b/g);
// => ["1234", "67890", "212123"]