向正则表达式添加动态值
Posted
技术标签:
【中文标题】向正则表达式添加动态值【英文标题】:adding dynamic values to regex 【发布时间】:2022-01-14 23:56:22 【问题描述】:我有一个正则表达式,我检查输入是否有 6 位数字。我可以用下面的 refgex 来实现它
/^\d6$/gm.test("123456")
我在多个地方都使用过这个正则表达式,所以我想把它变成一个函数
function testNumber(number, digitLength = 6)
return /^\d6$/gm.test(number)
现在在某些地方 digitLength 为 3,在某些地方为 4,现在我如何在正则表达式中插入 digitLength 以便我可以传递尽可能多的 digitLength 而不是在正则表达式中硬编码 6。
感谢任何帮助
【问题讨论】:
new RegExp(`^\\d$digitLength$`, 'gm').test(number)
@CherryDT 是的,模板文字很容易,但是在哪里添加,所以我很困惑,而不会失败正则表达式
所以没有办法在正则表达式字符串中插入变量?
@CherryDT 让我试试看会更新
另见:Use dynamic (variable) string as regex pattern in javascript
【参考方案1】:
除了动态正则表达式,您还可以这样做:
function testNumber(number, digitLength = 6)
return number.length === digitLength // check expected length
&& /^\d+$/.test(number); // and that it is all digits
【讨论】:
【参考方案2】:您正在寻找(您的正则表达式):
function testNumber(number, digitLength = 6)
return new RegExp(`^\\d$digitLength$`, 'gm').test(number);
参考:RegExp,Template literals。
相同,但经过优化:
正如@Thomas 所注意到的,您不需要g
标志,因为您始终匹配全局(完整字符串),并且您也不需要m
标志,因为您接受单行输入。所以像这样的正则表达式就足够了:
function testNumber(number, digitLength = 6)
return new RegExp(`^\\d$digitLength$`).test(number);
【讨论】:
为什么是gm
?这里不需要 global 或 multiline。我们总是匹配整个字符串。
@Thomas 有意义,我会更新答案,谢谢建议!以上是关于向正则表达式添加动态值的主要内容,如果未能解决你的问题,请参考以下文章