将字符串转换为正则表达式

6
我正在使用 Jacob Wright 开发的非常好用的 JavaScript 库 "array-query" 来搜索对象数组。
其中一个方法是 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;的形式? 非常感谢任何帮助或想法,希望这不会太令人困惑。


3
在这里:https://dev59.com/FHNA5IYBdhLWcg3wrPyq - mzedeler
这个问题之前已经被问过了,请看一下mzedeler发布的链接。我还建议阅读一些关于JavaScript正则表达式的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions。 - Felix Kling
3个回答

4

您应该做...

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

基本上,你可以把它想象成...
var regex = /pattern/modifiers;

as

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);

2
"regex" 需要一个 RegExp 对象,而不是一个字符串。 - Fabrício Matté
1
这是非常错误的。"/foo/" 是一个字符串,而 /foo/ 则是一个正则表达式字面量。OP 在问题中甚至提到了这一点,你有看到吗? - Felix Kling
我没有包含任何双引号。我只是将通过输入框捕获的文本与斜杠连接起来。你仔细阅读了我的代码吗? - skparwal
你可以将其转换为RegExp对象,例如:var reg = new RegExp('/'+string+'/'); - skparwal
无论使用单引号还是双引号都没有关系,两者都表示字符串。如果你喜欢,我也可以写成'/foo/'。是的,在这里将值传递给RegExp是必要的,而这就是实际的解决方案!但是,包括斜杠是错误的。正确的解决方案应该是regex(new RegExp(string))。否则,正则表达式只能匹配字面上包含“/”的值。 - Felix Kling
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接