在搜索字符串中包含通配符的正则表达式

Regular expression including wildcard character in search string

本文关键字:通配符 正则表达式 包含 搜索 字符串      更新时间:2023-09-26

我想要一个字符串的正则表达式该字符串可以包含*?。但应该至少有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-9a-z][*?]?){3,}$

解释:

  • ^匹配字符串
  • [*?]?匹配可选的*?
  • (...){3,}组必须出现至少3次
  • [0-9a-z][*?]?匹配字母数字字符,后跟可选的*?
  • $匹配字符串

连续*?不匹配。

更新:忘了提,但它是在我的脑海中:使用i修饰符使匹配不区分大小写(/.../i)

可以使用正则表达式并在javascript中实现

var searchin = item.toLowerCase();
var str = "*abc*";
str = str.replace(/[*]/g, ".*").toLowerCase().trim();
return new RegExp("^"+ str + "$").test(searchin);

因为我猜?代表任何一个字符和*任意数量的字符,并且您想要禁止连续的*,但不是连续的?(因此file.???将是有效的,代表file.后跟三个字符,例如file.txt),并允许其他内容而不仅仅是[A-Za-z'd*?]:

/^(?!.*'*'*)(?:[^a-z'd]*[a-z'd]){3,}[^a-z'd]*/i

假设file.???*也是有效的,因为这个组合意味着"至少3个字符"