常见的通配符(例如*和?)和javascript regexp之间是否有任何简单的转换?

时间:2014-01-14 17:06:39

标签: javascript regex

对于通配符,

*?是非程序员最容易理解的;在这种情况下,分别是多个字符和单个字符通配符。

如果我收到一个字符串,其中"?"可能出现在字符串的任何位置(例如“sing?”或“spo?ls”),我怎样才能将字符串转换为javascript regexp然后与字典列表进行比较?在"spo?ls"的情况下,我希望匹配“线轴”,“战利品”等。

同样使用"*"。感谢。

对不起,如果我不清楚:当我的意思是普通的通配符,对其他环境来说很常见,而不是Javascript:所以,是的,“?”等于任何单个字符[a-z]和“”等于一个或多个字符[a-z]。在“”的情况下,考虑“* sing”,这将匹配“arousing”,“carousing”等。或者,“ba * ed”,它将匹配“烘焙”,“库存”或“平衡”。

5 个答案:

答案 0 :(得分:3)

大致是:

  • *.*(任何字符,零或更多)
  • ?.(任何角色,只有一个)

您还需要忽略大小写(带有i标志)并确保其他任何内容都没有匹配(使用锚点),例如:

  • spo?ls/^spo.ls$/i

无论如何,我建议你学习一些关于正则表达式的基础知识。 MDN documentation非常好。

P.S。 .元字符与新行不匹配。

答案 1 :(得分:1)

这不是?所做的。 ?是一个量词,一张外卡。

如果您想匹配任何单个字符,则需要.

在您的情况下,您可以将?的所有实例替换为.,然后将字符串传递给RegExp

pattern = "spo?ls";

// produces /spo.ls/
regex = RegExp(pattern.replace(/\?/g, '.'));

同上*:这是一个量词,不是一张外卡。您可以对*执行相同的操作,除非您使用*替换.*的所有实例。

答案 2 :(得分:1)

在正则表达式中,句点(.)用于匹配“任何字符”。

因此,您可以将"spo?ls"“转换”为/spo.ls/

如果您希望.可能匹配0个字符,则可以使用/spo.?ls/?表示“0或1个字符”。

在正则表达式中,*字符表示“0或更多”,+表示1或更多。

因此,根据您要查找的内容,"spo*ls"可以转换为/spo.+ls//spo.*ls/

答案 3 :(得分:0)

var string = 'spo?ls';
if (string.indexOf('?') !== -1) string = string.replace('?', '[a-zA-Z]');
if (string.indexOf('*') !== -1) string = string.replace('*', '[a-zA-Z]+');
var dictionary = ['spoils', 'spools', 'spoools', 'fools', 'tools'];
var re = new RegExp('^' + string + '$');
var results = dictionary.filter(function(el) {
    return (el.match(re) !== null);
});

console.log(results);
["spoils", "spools"];

现在尝试使用string = 'spo*ls';

console.log(results);
["spoils", "spools", "spoools"];

答案 4 :(得分:-1)

Pattern tokenpattern = Pattern.compile("string you get");
Matcher matcher = tokenpattern.matcher(content to check);
matcher.find();

这是你问题的答案吗?

我可以看到你得到的String已经是RegularExpression,你只需要将它作为一个。

Lg Teifun2