除了Javascript之外,正则表达式的所有实例都使用类似的东西(用于在括号中查找数字)"\\[[0-9]+\\]"
或r"\[[0-9]+\]"
。然后,该字符串将用于Contains("\\[[0-9]+\\]", "[1009] is a number.")
之类的函数中。 Javascripts中的正则表达式字符串根本没有封装,因此我看到var patt = /w3schools/i
之类的内容。为什么是这样? Javascript如何区分这个和其他内容?为什么不使用普通字符串?
答案 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正则表达式。
开始和结束/
是不是表达式的一部分,它们只是标记正则表达式文字,就像{}
标记对象文字一样。