所以我使用的是javascript,我需要使用正则表达式来匹配一些数字和字母混合的数据,但是因为我现在正在学习正则表达式,这个任务太复杂了,我无法理解并让它像我一样工作想要它,有什么想法吗?
[ABC] [122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [ 1113B86JD ] RANDOM [ABC] [122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [ 115M3X2G9 ]随机 [ABC] [122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [ 1113P86JD ] RANDOM [ABC] [122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [ 314PTVPNL ] RANDOM [ABC] [122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] 114PAVPNL RANDOM
我想要的数据有90%的时间是两个括号长度,然后是5个字符,所以我找到了两个正则表达式,其余的数据仍然是数字和字母的混合但没有括号。
[(。*?)]
用于获取括号之间的数据
^([0-9] + [A-ZA-Z] + | [A-ZA-Z] + [0-9] +)[0-9A-ZA-Z] * $
获取数字和字母的混合
现在我如何将两者结合起来,我尝试了很多次使其工作但它没有用,有人可以帮助我。
答案 0 :(得分:1)
你似乎追求的模式是9个字母和数字的组合(不多也不少)。我也认为你想要的是在第一场比赛后继续进行搜索。如果是,则使用全局标记g
。有关详细信息,请参阅代码段。
<强>段强>
var str = '[ABC][122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [1113B86JD] RANDOM [ABC][122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [115M3X2G9] RANDOM [ABC][122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [1113P86JD] RANDOM [ABC][122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] [314PTVPNL] RANDOM [ABC][122/29] [13:40] [RANDOM_TEXT] [PRT] [TPT] [RANDOM] 114PAVPNL RANDOM';
var res = str.match(/(\b\w{9}\b)/g);
/* \b word boundry
|| \w Any word or number
|| {9} 9 of \w
|| \b word boundry
*/
console.log(res);
答案 1 :(得分:1)
您需要使用特殊的“复合括号”将您的字母和数字正则表达式(即第二个没有^
和$
锚点)括起来:
(?:^|\[|\s)((?:[0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*)(?:$|\]|\s)
开头的“复合括号”可以用文字开头(^
),左方括号(\[
)或空格(\s
)表示。因此正则表达式开头的(?:^|\[|\s)
。
结束“复合括号”可以用文字结尾($
),结束方括号(\]
)或空格(\s
)表示。因此,正则表达式末尾的(?:$|\]|\s)
。
您需要的字母和数字序列位于第一个捕获组中。
演示:https://regex101.com/r/WLwu9p/1
请注意我从你的第二个表达式非捕获((...)
)中创建了组((?:...)
),因为在这种特殊情况下,只需要分组。