1

为了更好地理解 JavaScript/OOP,我很好奇 JavaScript 中如何处理正则表达式参数参数。我已经对正则表达式了解很多,所以这与解释模式无关。这是关于确定 JavaScript 如何处理它。

例子:

newStr = str.replace(/(^\W*|\W*$)/gi,'');

这基本上会从字符串中修剪任何特殊字符和空格。但是,/(^\W*|\W*$)/gi不是一个封装的字符串,因此,理解这个概念让我感到困惑,因为 JS 对象不是字符串,也不是数字。这个对象类型是单独的(即,仅正则表达式),还是用于其他目的?

4

5 回答 5

6

它只是JavaScript 用于正则表达式的一种特殊语法。它评估为一个对象,与以下内容没有什么不同:

var rex = /(^\W*|\W*$)/gi;
decision = str.replace(rex, '');

或者:

var rex = new RegExp('^\\W*|\\W*$', 'gi');

RegExp MDN 文档有大量详细信息。

于 2012-11-06T15:41:23.373 回答
3

正则表达式是 JavaScript 中的一等公民,即它们是一个单独的对象类型。

RegExp您可以使用其标准构造函数构造一个新对象:

var regex = new RegExp("(^\\W*|\\W*$)", "gi");

或使用允许您减少反斜杠的特殊“正则表达式文字”表示法:

var regex = /(^\W*|\W*$)/gi;
于 2012-11-06T15:42:00.700 回答
2

/(^\W*|\W*$)/gi是一个正则表达式字面量,它是 JavaScript 中的一种对象类型。这种类型可以作为第一个参数传递给该replace方法,该方法接受正则表达式或子字符串。

于 2012-11-06T15:43:21.947 回答
2

仅此对象类型(即,仅正则表达式)

这是对的。RegExpobject是语言内置的一种特殊类型的值。它们是 JavaScript 中少数具有“文字”表示的类型之一。

这确实使它们相当独特。该语言中没有任何其他特殊用途的文字。其他文字是通用类型,例如:

  • null
  • 布尔值 ( true/ false)
  • 数字 ( 1.0, 2e3, -5)
  • 字符串 ( 'hello', "goodbye")
  • Arrays ( [1, 2, 3])
  • Objects ( { name: "Bob", age: 18 })
于 2012-11-06T15:44:48.790 回答
1

添加到人们说的大致相同的事情:

除了它是具有自己语法的文字之外,您实际上可以以文字形式访问其方法:

/bob/gi.exec(" My name is Bob ");

...只要您使用的浏览器足够年轻以确实支持 RegEx 文字(现在很难找到不支持的浏览器,如果您这样做,浏览器是否支持 CSS?)。

于 2012-11-06T15:45:06.237 回答