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*$)/giJavaScript のオブジェクト型である正規表現リテラルです。replaceこの型は、正規表現または部分文字列のいずれかを受け入れるメソッドに最初のパラメーターとして渡すことができます。

于 2012-11-06T15:43:21.947 に答える
2

Is this object-type alone (i.e., regex-only)

This is correct. RegExp objects are a special type of value that's built-in to the language. They are one of only a handful of types that have "literal" representations in JavaScript.

This does make them fairly unique; there aren't any other special-purpose literals in the language. The other literals are generic types like:

  • null
  • boolean values (true/false)
  • numbers (1.0, 2e3, -5)
  • strings ('hello', "goodbye")
  • Arrays ([1, 2, 3])
  • Objects ({ name: "Bob", age: 18 })
于 2012-11-06T15:44:48.790 に答える
1

To add to the people saying largely the same thing:

On top of the fact that it's a literal with its own syntax, you can actually access its methods in literal form:

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

...so long as the browser you're using is young enough to indeed support RegEx literals (it's pretty hard to find one that doesn't, these days, and if you do, does the browser support CSS?).

于 2012-11-06T15:45:06.237 に答える