【问题标题】:Create regex object using string input [duplicate]使用字符串输入创建正则表达式对象
【发布时间】:2018-05-17 20:30:12
【问题描述】:

当我像这样实例化 Regex 对象时,我有一个正则表达式:

this.checkRegex = new RegExp(/^([0|\[+][0-9]{0,5})?([1-9][0-9]{0,15})$/);

它工作正常,但是如果我将正则表达式存储在字符串中它不起作用:

  private checkReg: string = '/^([0|\[+][0-9]{0,5})?([1-9][0-9]{0,15})$/';
  this.checkRegex = new RegExp(this.checkReg);

我正在使用角度打字稿。当我试图通过在构造函数中抛出字符串来实例化时,我在这里缺少什么。代码示例将不胜感激。感谢您的帮助。

【问题讨论】:

标签: javascript regex angular typescript


【解决方案1】:

当您将字符串传递给 RegExp 构造函数时,您需要稍微更改它。而不是

'/^([0|\[+][0-9]{0,5})?([1-9][0-9]{0,15})$/'

你可以省略前面和后面的斜杠

'^([0|\\[+][0-9]{0,5})?([1-9][0-9]{0,15})$'

还要注意双重转义反斜杠。

【讨论】:

  • 它有效,但是我不必添加双反斜杠。感谢您的帮助。
【解决方案2】:

如果要将正则表达式存储为字符串,请将其存储在前后不带正斜杠的情况下。创建 RegExp 对象时,这些对象会被转义:

new RegExp('/^([0|\[+][0-9]{0,5})?([1-9][0-9]{0,15})$/');

将导致

/\/^([0|[+][0-9]{0,5})?([1-9][0-9]{0,15})$\//

同时,

new RegExp('^([0|\[+][0-9]{0,5})?([1-9][0-9]{0,15})$');

会起作用:

/^([0|[+][0-9]{0,5})?([1-9][0-9]{0,15})$/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2010-12-04
    • 2021-07-19
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多