我在javascript中有一个长字符串,如
var string = 'abc234832748374asdf7943278934haskhjd';
我想像
那样匹配 abc234832748374
- 就是 - 我试过像
string.match(\abc[^abc]|\def[^def]|)
但这不能让我得到两个字符串,因为我需要数字吗?
基本上我需要abc
+ 8个字符之后和def
之后的8-11个字符?我怎么能这样做?
答案 0 :(得分:32)
如果您希望文字字符串abc
或def
后跟8-11位数字,则需要以下内容:
(abc|def)[0-9]{8,11}
您可以在此处进行测试:http://www.regular-expressions.info/javascriptexample.html
请注意,如果您不想匹配 more 而不是11位数,则需要在字符串末尾添加锚点(或[^0-9]
)。如果它只是8或更多,您可以将{8,11}
替换为{8}
。
答案 1 :(得分:11)
要详细说明已发布的答案,您需要全局匹配,如下所示:
var matches = string.match(/(abc|def)\d{8,11}/g);
这将匹配字符串的所有子集:
“g”标志(全局)为您提供所有匹配的列表,而不仅仅是第一个匹配。
在你的问题中,你要求8-11 字符而不是数字。如果它们是数字还是其他字符无关紧要,您可以使用“。”而不是“\ d”。
我还注意到,每个示例匹配在“abc”或“def”之后都有超过11个字符。如果有任意数量的数字,那么以下正则表达式可能更适合:
var matches = string.match(/(abc|def)\d*/g);
var matches = string.match(/(abc|def)\d+/g);
var matches = string.match(/(abc|def)\d{8,}/g);
答案 2 :(得分:1)
您可以将abc[0-9]{8}
与字符串abc
匹配,后跟8位数。
如果前三个字符是任意的,之后是8-11个数字,请尝试[a-z]{3}[0-9]{8,11}
答案 3 :(得分:1)
使用以下正则表达式获得完全匹配,
string.match(/(abc|def)\d{8,11}/g);
以g结尾
全球的 "g"
"i"
用于ignoreCase
"m"