将字符串转换为正则表达式[重复]
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中的字符串中的布尔真转换为真[重复]