如何使用javascript在regExp中使用动态变量?

时间:2019-11-19 16:07:21

标签: javascript regex bootstrapvalidator

我知道这个问题已经有了答案。我已阅读此[answer] [1]。但这对我不起作用。由于我是regEx和js的新手,所以我不明白为什么他们使用如下所示的此类代码来传递参数。

var replace = "regex";
var re = new RegExp(replace,"g");

我已附加了我在JSP中编写的代码。我使用了引导程序验证器。请在下面找到它

/* Get the domain name from the controller */ 

var domainName = ${domainName}

                  /*Validation part*/  
         email: {
                    trigger: 'blur',
                    validators: {
                        notEmpty: {
                            message: 'The email address is required'
                        },
                        regexp: {
                            regexp : /"^([\w-\.]+)@" + domainName/,
                            message: 'The domain name is wrong and your domain name is: ' + domainName
                        }
                    }
                }

在这里,我将正则表达式写为 /“ ^([\ w-。] +)@” + domainName / 。在消息中,我已将变量名称写为 domain 。因此,该消息已显示在GUI中。我需要知道如何将变量(域名)传递给regEx。请说明该怎么做?

编辑1: 如果我这样对regEx进行硬编码,则可以正常工作。但是硬编码不是一个好主意。

           regexp : /^([\w-\.]+)@(example.com|example1.com|uk.co|gmail.com)$/,

答案: 我解决了这个问题。 一旦获得域名,就将正则表达式和域名划分为单独的变量,然后将它们串联在变量(模式)中。

    var domainName = ${domainName}

        const pattern1 = String.raw`([\w-\.]+)`;
        const pattern2 = (domainName);
        const pattern = new RegExp("^" + pattern1 + "@" + pattern2 + "$");

我在验证部分提到了变量“ pattern”,它成功地工作了。

                email: {
                    trigger: 'blur',
                    validators: {
                        notEmpty: {
                            message: 'The email address is required and cannot be empty'
                        },
                        regexp: {
                            regexp : pattern,
                            message: 'The domain name is wrong and your domain name is: ' + domainName

                        }

                    }
                },

  [1]: https://stackoverflow.com/questions/494035/how-do-you-use-a-variable-in-a-regular-expression

2 个答案:

答案 0 :(得分:1)

您可以使用接受字符串的Regex承包商。

const regex = new RegExp('"^([\w-.]+)@"' + domainName);

编辑

更改此行:

regexp : /"^([\w-\.]+)@" + domainName/,

收件人:

regexp : new RegExp('"^([\w-.]+)@"' + domainName),

答案 1 :(得分:0)

您可以尝试一下 JavaScript会在表达式的结尾和开头自动添加“ /”。因此您可以忽略它们。

 var expression = "^([\w-\.]+)@ + domainName" ;