为什么Javascript中的正则表达式字符串没有封装在引号中?

时间:2015-07-18 13:57:40

标签: javascript regex

除了Javascript之外,正则表达式的所有实例都使用类似的东西(用于在括号中查找数字)"\\[[0-9]+\\]"r"\[[0-9]+\]"。然后,该字符串将用于Contains("\\[[0-9]+\\]", "[1009] is a number.")之类的函数中。 Javascripts中的正则表达式字符串根本没有封装,因此我看到var patt = /w3schools/i之类的内容。为什么是这样? Javascript如何区分这个和其他内容?为什么不使用普通字符串?

3 个答案:

答案 0 :(得分:3)

  

为什么会这样?

这就是regex literals的工作方式。正则表达式是JS中的对象,而不是纯字符串。

  

Javascript如何区分这个和其他内容?

这就是如何定义语言语法。事实上,它可以更容易地区分字符串和正则表达式,而不是其他语言。

  

为什么不使用普通字符串?

因为逃避行为不同。其他语言使用" raw"这个字符串,JavaScript没有(没有)。相反,他们为正则表达式引入了一个文字表示法 - 使用/作为分隔符(从Perl借用)。

当然,你仍然可以使用普通字符串,并使用RegExp构造函数创建一个正则表达式对象,但对于静态表达式,字面语法要简单得多。

答案 1 :(得分:2)

嗯,它们不是一开始的字符串。是正则表达式文字

  

Javascript如何区分这个和其他内容?

就像"用于分隔字符串文字,或者[...]用于分隔数组文字一样,/用于分隔正则表达式文字。

  

为什么不使用普通字符串?

正则表达式具有不同的特殊字符和不同的转义规则。这就是为什么如果使用带有RegExp的字符串(例如"\\[[0-9]+\\]"),则必须使用双重转义的原因。许多人弄错了,这有点令人困惑。

所以有一个正则表达式的表示是有道理的,而不是"在"内部"另一个抽象(字符串)。

答案 2 :(得分:0)

JavaScript中的正则表达式是对象而不是字符串。

var regex = /[0-9]/;
console.log(typeof regex); // "objec"
  

正则表达式是用于匹配字符串中的字符组合的模式。在JavaScript中,正则表达式也是对象。这些模式与RegExp的exec和测试方法一起使用,并与String的匹配,替换,搜索和拆分方法一起使用。本章介绍JavaScript正则表达式。

Regular Expressions

开始和结束/不是表达式的一部分,它们只是标记正则表达式文字,就像{}标记对象文字一样。