我想要一个字符串的正则表达式
该字符串中可以包含*
和?
。但是应该至少有3个字母数字字符。
所以,
*abc* is valid
*ab*c is valid
*aaa? is valid
*aa is not valid
**aaa is not valid as it is not a valid regular expression
答案 0 :(得分:5)
这应该这样做:
^[*?]?([0-9a-z][*?]?){3,}$
说明:
^
匹配字符串的开头[*?]?
与可选的*
或?
(...){3,}
该小组必须至少出现3次[0-9a-z][*?]?
匹配字母数字字符,后跟可选的*
或?
$
匹配字符串的结尾连续*
和?
不匹配。
更新:忘了提及它,但我想到了:使用i
修饰符使匹配不区分大小写(/.../i
)。
答案 1 :(得分:1)
可以使用正则表达式并在javascript中实现
var searchin = item.toLowerCase();
var str = "*abc*";
str = str.replace(/[*]/g, ".*").toLowerCase().trim();
return new RegExp("^"+ str + "$").test(searchin);
答案 2 :(得分:0)
因为我猜测?
代表任意一个字符和*
任意数量的字符,并且您想要禁止连续*
,但不能连续?
(以便file.???
有效,代表file.
后跟三个字符,例如file.txt
),并允许其他内容而不只是[A-Za-z\d*?]
:
/^(?!.*\*\*)(?:[^a-z\d]*[a-z\d]){3,}[^a-z\d]*/i
假设file.???*
也应该有效,因为这种组合意味着“至少3个字符”。