将一个字符串转换为正则表达式
将一个字符串转换为正则表达式
我正在使用一款名为\"array-query\"的非常好用的JavaScript库,由Jacob Wright提供,用于在对象数组中进行搜索。\n其中一种方法是regex()
,可以在括号中包含正则表达式,如regex(/[^\\w\\s]/)
。如果我将表达式硬编码如上所示,它可以正常工作。但如果我先将相同的表达式放入一个变量中,它就无法工作,如下所示:\n
var reg = "/[^\w\s]/"; regex(reg);
\n有人告诉我:\n
\n你在正则表达式周围加了引号,使其变成了字符串。去掉引号。\n
\n因此,如下所示就可以正常工作:\n
var reg = /[^\w\s]/; regex(reg);
\n问题是,我需要接受来自文本框的用户输入作为正则表达式的一部分。例如,如果用户输入字母z
,它需要变成/z/
。即使我输入/z/
,返回的textbox.value
也会出现与var reg = \"/z/\"
相同的问题。如果我将var reg = /z/; regex(reg);
硬编码,它可以正常工作。\n如何将输入框的值\"z\"
转换为var reg = z;
的形式?\n非常感谢任何帮助或想法,希望这不会太令人困惑。
问题的出现原因是代码中使用了字符串来表示正则表达式的模式,而实际上需要使用RegExp对象。
解决方法是将字符串转换为RegExp对象,可以使用RegExp构造函数来实现。具体代码如下:
var string = $('#input_id').val(); string = string.replace('/', ''); var reg = new RegExp('/'+string+'/'); regex(reg);
代码中的regex函数期望传入的是一个RegExp对象,而不是一个字符串。
这是非常错误的。"/foo/"
是一个字符串,而/foo/
是一个正则表达式字面量。楼主在问题中甚至提到了这一点,你有没有仔细阅读问题?
我的代码中没有包含双引号。我只是将斜杠与通过输入框捕获的文本拼接在一起。你有没有仔细阅读我的代码?
可以将其改为RegExp对象的形式,如:var reg = new RegExp('/'+string+'/');
无论使用单引号还是双引号都没关系。两者都表示一个字符串。如果你更喜欢,我也可以写成'/foo/'
。是的,在这里将值传递给RegExp是必要的,那才是真正的解决方法!但是,包含斜杠是错误的。正确的解决方法应该是regex(new RegExp(string))
。否则,正则表达式只会在值中包含/
时才匹配。
哇!!非常感谢大家如此快速和出色的回答。它起作用了!!var reg = new RegExp(string); 我又可以呼吸了。Markandeya
也许你想要写成这样:var _str = "sample string"; _str = "/"+_str+"/s"; var _reg = new RegExp (_str);
在某些情况下,我们需要将一个字符串转换成正则表达式。这种需求可能是由于我们需要使用字符串中的特定模式来进行匹配或替换操作。然而,JavaScript 中的正则表达式对象需要以特定的语法来创建,而不是简单地将字符串传递给构造函数。
在上述代码中,我们尝试使用字符串 "string" 创建一个正则表达式对象 var reg。然而,这种方式创建的正则表达式对象不会按照我们期望的方式工作。这是因为正则表达式对象的构造函数期望接收一个字符串作为其模式,并且可以可选地接收一个标志参数来指定匹配模式。
要解决这个问题,我们需要使用正则表达式字面量语法或正则表达式对象的构造函数来将字符串转换成正则表达式。下面是两种解决方法的示例代码:
使用正则表达式字面量语法:
var reg = /string/;
使用正则表达式对象的构造函数:
var reg = new RegExp("string");
使用上述方法之一,我们可以正确地将字符串转换成正则表达式对象,并且可以使用该对象进行各种匹配和替换操作。
问题:如何将一个字符串转换为正则表达式?
原因:在JavaScript中,我们可以使用两种方式创建正则表达式:字面量方式和构造函数方式。而有时候我们可能需要将一个字符串转换为正则表达式。
解决方法:要将一个字符串转换为正则表达式,可以使用RegExp构造函数。代码示例如下:
var regex = new RegExp('your regex string');
这样,我们就可以将一个字符串作为参数传递给RegExp构造函数,从而创建一个正则表达式对象。与此相似,我们也可以使用字面量方式创建正则表达式,代码示例如下:
var regex = /pattern/modifiers;
这种方式更为简洁,但是如果我们需要将一个字符串转换为正则表达式,就需要使用RegExp构造函数。
如果想要了解更多关于正则表达式的知识,可以参考以下链接:
- [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)
- [w3schools](http://www.w3schools.com/js/js_obj_regexp.asp)