如何使用 javascript 在 regExp 中使用动态变量? [复制]

Posted

技术标签:

【中文标题】如何使用 javascript 在 regExp 中使用动态变量? [复制]【英文标题】:How to use dynamic variable in regExp using javascript? [duplicate] 【发布时间】:2020-03-15 05:23:34 【问题描述】:

我知道这个问题已经有了答案。我已阅读此 [答案][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/。在消息中,我将变量名称写为 domainName。因此该消息已显示在 GUI 中。我需要知道如何将变量(域名)传递给正则表达式。请解释一下如何做到这一点?

编辑 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://***.com/questions/494035/how-do-you-use-a-variable-in-a-regular-expression

【问题讨论】:

请向我们展示这段代码,因为它在浏览器中呈现 - 尝试同时使用两种不同的语言进行调试并不好玩! @Mike Brokington 我附加的代码仅取自相应的 JSP 页面。正如我在第一行代码中提到的那样,我使用 EL 从控制器获取了 domainName。 @Toto 正确阅读我的问题 【参考方案1】:

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

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

编辑

改变这一行:

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

到:

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

【讨论】:

你能告诉我应该在哪里写这个吗?我对前端完全陌生。我写了这样var domainName = $domainName,const regex = new RegExp('"^([\w-.]+)@"' + domainName); 并在消息行上方使用了像 /regex/ 这样的正则表达式 更新了我的答案。 不行 好的,错误是什么?输出? 它接受所有域名。实际上表单在 iframe 中打开【参考方案2】:

你可以试试这个 javascript 会在表达式的末尾和开头自动添加“/”。所以你可以忽略它们。

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

【讨论】:

这是 not javascript 正则表达式,而是常规 string @Srimoyee Sen 这行不通

以上是关于如何使用 javascript 在 regExp 中使用动态变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Javascript RegExp 转义括号? [复制]

如何使用 javascript regexp 替换字符串的一部分

JavaScript中RegExp对象

如何将 javascript regexp 中的 Euro € 符号与八进制、十六进制或 unicode 元字符匹配?

Javascript 提取评论 RegExp

JavaScript RegExp 对象