Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式差异_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式差异

JavaScript正则表达式差异,javascript,regex,Javascript,Regex,两者的区别是什么 var regEx = /\d/; 及 Bob两者的计算结果都是相同的正则表达式,但第一个是文本,这意味着不能在其中使用任何变量,也不能动态生成正则表达式 第二种方法显式使用构造函数,并可用于创建动态正则表达式 var x = '3', r = ( new RegExp( x + '\d' ) ); r.test('3d') 上面是一个使用构造函数动态构造正则表达式的示例,您不能以文本形式这样做 在99%的情况下,JS中的所有RegExpe都将依赖第一个版本(文字)。在高级

两者的区别是什么

var regEx = /\d/;


Bob

两者的计算结果都是相同的正则表达式,但第一个是文本,这意味着不能在其中使用任何变量,也不能动态生成正则表达式

第二种方法显式使用构造函数,并可用于创建动态正则表达式

var x = '3', r = ( new RegExp( x + '\d' ) ); r.test('3d')
上面是一个使用构造函数动态构造正则表达式的示例,您不能以文本形式这样做

在99%的情况下,JS中的所有RegExpe都将依赖第一个版本(文字)。在高级场景中,您需要(比如)用户输入来动态构造正则表达式,这时您需要第二个表单

编辑#1第一个匹配一个数字,第二个仅匹配字母
d
。你必须双倍逃逸第二个,才能使它等于第一个,我想你是有意这么做的。请记住,如果第二个示例是
newregexp('\\d')

/\d/.test('3') // true
( new RegExp('\d') ).test('3') // false
( new RegExp('\\d') ).test('3') // true

感谢您的解释,我问的原因是我有这个表达式/^+\124;[\\/\ 35;]+$/gi(1个或多个空格或包含\/\35;;或以一个或多个空格结尾)。当每奇数次使用非构造函数时,结果为false。结果是交替的。当使用构造器时,每次都按预期工作。奇怪!还有另一个区别:文本在解析时只创建一个对象,而构造函数总是创建一个新对象。虽然在ES5中,这将被更改,但文本也将始终返回一个新对象。
/\d/.test('3') // true
( new RegExp('\d') ).test('3') // false
( new RegExp('\\d') ).test('3') // true