Javascript array string to regex literal
我在这里有一个工作示例:http://jsfiddle.net/r7kuk/
我试图创建一个包含带有regex分隔符和设置标志的完整正则表达式的数组,但是regexp对象将给定的字符串解析为字符串,而不是正则表达式。
VS
我的问题是:如何将String ED正则表达式转换成实际的正则表达式?
最新消息:直到费利克斯·金友好地向我解释
1
| var array = ["/wolves/i","/Duck/"]; |
可以安全地成为:
1
| var array = [/wolves/i, /Duck/]; |
- 检查stackoverflow.com/questions/4589587/…和stackoverflow.com/questions/874709/…
- 为什么不将数组创建为[/wolves/i, /Duck/]?你为什么要使用字符串?这对我来说似乎是不必要的复杂。
- @费利克斯克林:我不知道这是可能的,不用引号。
- 那么,您是如何创建正则表达式的呢?/.../表示regex文字。你以前一定用过/.../.test(...)或str.match(/.../)。无论如何,这里有一些文档:developer.mozilla.org/en/javascript/guide/regular_expression‌&8203;s
- @费利克斯克林:是的,我一直在使用str.match(/.../),虽然我不知道在数组中不使用字符串是可能的,假设regexp可能包含未转义字符并失败;或者我可能试图匹配一个点并意外关闭一个数组项。
- 但是你可以看到,在EDCOX1(3)中,你不使用引号:),你可以把任何值放在一个数组中:EDCOX1(6)。如果解析器无法识别添加到数组中的内容,那么它将抛出语法错误。
- 如果您要在JS中创建数组,那么开始使用ReGEX数组(要么EDCOX1,1,要么EDCOX1,8)。当您可以使用regex开始时,不要浪费CPU时间将字符串转换为regex。但是,如果您希望生成阵列服务器端,那么无论如何,您都将无法进行转换。
- @费利克斯克林:是的,但是str.match(/.../)不喜欢数组):
- 如果您的意思是不能将数组传递给str.match,那么这是正确的,因为它需要一个正则表达式。不过,您可以迭代数组,并分别传递每个表达式(就像在小提琴中那样)。
- @Felixkling:注意到[{foo: 42}, 5, /bar/g,"baz", function(x) { return x;}]和str.match(/.../)对阵列的态度不好。谢谢您!
- 如何将变量传递给正则表达式javascript的可能副本?
试试这个:
1 2
| var regexSplit = regex.split( '/' );
var realRegex = new RegExp( regexSplit[1], regexSplit[2] ); |
或更好:
1 2
| var regexMatch = regex.match( /^\/(.*)\/([^\/]*)$/ );
var realRegex = new RegExp( regexMatch[1], regexMatch[2] ); |
更好的原因是,如果正则表达式包含"//",第一个将失败。;)
从这里被盗:
Use the RegExp object constructor to create a regular expression from a string:
1 2 3
| var re = new RegExp("a|b","i");
// same as
var re = /a|b/i; |
- 如果你逐字复制另一个答案,那么这个问题不应该作为一个副本关闭吗?
- 可能是的……