我需要编写regexp,它可以找到一个验证为函数参数和星号的字符串。我写
'some*'.match(/^[a-z0-9]+|(\*$)/i)
但是找不到星号。第二个结果项只是未定义。.
我计划获取字符串“ some”和“ *”,同样,如果您搜索的某个单词末尾没有星号,则必须仅找到该单词。
答案 0 :(得分:1)
您需要在第一个[a-z0-9]
部分周围有一个附加的捕获组,第二个捕获组应该与?
一起设置为可选。
此外,|
不应该在那里,因为它指定了两种不同的选择,因此您的RegExp
实际上是在尝试匹配/^[a-z0-9]+/i
,如果不匹配,那么尝试/(\*$)/i
,这不是您想要的。这就是为什么即使出现星号也得到undefined
的原因,也是为什么匹配以星号结尾且不以a-z0-9
开头的任何东西(例如_*
)也将匹配的原因。
下面是所有这些更改的示例:
const match1 = 'some'.match(/^([a-z0-9]+)(\*)?$/i);
const match2 = 'some*'.match(/^([a-z0-9]+)(\*)?$/i);
console.log(match1);
console.log(match2);
如果您想摆脱第一个匹配项,并且只在其中有一个星号,则可以使用Array.prototype.slice()
和Array.prototype.filter()
:
const match1 = ('some'.match(/^([a-z0-9]+)(\*)?$/i) || []).slice(1).filter(Boolean);
const match2 = ('some*'.match(/^([a-z0-9]+)(\*)?$/i) || []).slice(1).filter(Boolean);
console.log(match1);
console.log(match2);