*
和?
是非程序员最容易理解的;在这种情况下,分别是多个字符和单个字符通配符。
如果我收到一个字符串,其中"?"
可能出现在字符串的任何位置(例如“sing?”或“spo?ls”),我怎样才能将字符串转换为javascript regexp然后与字典列表进行比较?在"spo?ls"
的情况下,我希望匹配“线轴”,“战利品”等。
同样使用"*"
。感谢。
对不起,如果我不清楚:当我的意思是普通的通配符,对其他环境来说很常见,而不是Javascript:所以,是的,“?”等于任何单个字符[a-z]和“”等于一个或多个字符[a-z]。在“”的情况下,考虑“* sing”,这将匹配“arousing”,“carousing”等。或者,“ba * ed”,它将匹配“烘焙”,“库存”或“平衡”。
答案 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