将字符串转换为正则表达式[重复]

Posted

技术标签:

【中文标题】将字符串转换为正则表达式[重复]【英文标题】:Convert a string into a regular expression [duplicate] 【发布时间】:2013-06-09 12:40:13 【问题描述】:

我正在使用 Jacob Wright 的名为 "array-query" 的非常好的 javascript 库来搜索对象数组。

一种方法是regex(),其中正则表达式可以包含在括号中,如下所示:regex(/[^\w\s]/)。如果我像我刚刚展示的那样对表达式进行硬编码,它就可以正常工作。如果我先将相同的表达式放入变量中,则它不起作用,如下所示:

var reg = "/[^\w\s]/"; 
regex(reg);

有人告诉我

你在你的正则表达式周围加上引号,使它成为一个字符串。删除引号。

因此

var reg = /[^\w\s]/; 
regex(reg);

工作正常。

问题是我需要接受来自文本框的用户输入作为正则表达式的一部分。例如,如果用户输入字母z,则需要将其更改为/z/。即使我输入/z/,返回的textbox.value 也有与var reg = "/z/" 相同的问题。如果我对var reg = /z/; regex(reg); 进行硬编码,它可以正常工作。

如何将"z" 的输入文本框值转换为var reg = z; 的表单? 非常感谢任何帮助或想法,希望这不会太混乱。

【问题讨论】:

这里:***.com/questions/874709/… 这个问题之前已经问过了,看看 mzedeler 发布的链接。我还建议阅读一些关于 JavaScript 正则表达式的文档:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…。 【参考方案1】:

你应该这样做

var regex = new RegExp('your regex string');

基本上可以想到

var regex = /pattern/modifiers;

作为

var regex = new RegExp(pattern,modifiers);

了解更多信息:MDN 或 w3schools

【讨论】:

【参考方案2】:
var reg = new RegExp("string");

【讨论】:

【参考方案3】:

你可以这样做:

var string = $('#input_id').val();
string = string.replace('/', '');

var regexpPattern = '/'+string+'/';
regex(regexpPattern);

【讨论】:

regex 需要 RegExp 对象,而不是字符串。 那是非常错误的。 "/foo/" 是一个字符串,而 /foo/ 是一个正则表达式文字。 OP甚至在问题中提到,您阅读了吗? 我没有包含任何双引号。我刚刚将斜杠与通过输入框捕获的文本连接起来。你仔细阅读我的代码了吗? 您可以将其更改为 RegExp 对象,例如: var reg = new RegExp('/'+string+'/'); 使用单引号还是双引号都没有关系。两者都表示一个字符串。如果您更喜欢,我也可以写'/foo/'。是的,在这里将值传递给RegExp 是必要的,这就是实际的解决方案! 但是包括斜线是错误的。正确的解决方案是regex(new RegExp(string))。否则,只有当值字面上包含 / 时,正则表达式才会匹配。

以上是关于将字符串转换为正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将java字符串转换为与replaceAll中的正则表达式兼容的字符串[重复]

使用正则表达式将python中的字符串中的布尔真转换为真[重复]

正则表达式,用于验证不同格式的字符串,用于特殊时间转换[重复]

在正则表达式中匹配字符串中的数字并转换为整数[重复]

如何将 Java 字符串转换为模式正则表达式?

将 HOCR 输出转换为字符串(用于正则表达式)的策略是啥?