向正则表达式添加动态值

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?这里不需要 globalmultiline。我们总是匹配整个字符串。 @Thomas 有意义,我会更新答案,谢谢建议!

以上是关于向正则表达式添加动态值的主要内容,如果未能解决你的问题,请参考以下文章

如何在正则表达式值或值内添加注释? [复制]

向复杂的正则表达式添加例外(使用前瞻和后瞻)

向表单输入字段添加默认值

使用正则表达式向 pdf 页面添加注释时出现 Swift 问题

c# 从远程 XML 文件动态添加正则表达式模式

如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?