正则表达式,包括搜索字符串中的通配符

时间:2011-07-21 13:24:44

标签: javascript regex

我想要一个字符串的正则表达式 该字符串中可以包含*?。但是应该至少有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

3 个答案:

答案 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个字符”。