2

JavaScript では、次のような HTML ブロックがあります。

<h2>{title}</h2>
<p><a href="{url}">{content}</a></p>

そして、正規表現の「一致」を使用して、すべての {item} の配列を吐き出そうとしています。したがって、私の出力は次のようになります。

['title', 'url', 'content']

私は次のようになりました:

var pattern = new RegExp("\{[a-zA-Z]+\}+");
var match = pattern.exec("{Sample} bob {text}");

しかし、それは最初のタグを返すだけです。

これは私の正規表現のスキルを超えています。誰でも助けることができますか?

乾杯!

4

5 に答える 5

7

グローバル フラグを使用してパターンを作成する必要があります。

var pattern = new RegExp("\{[a-zA-Z]+\}", "g");

また:

var pattern = /\{[a-zA-Z]+\}/g;

次に、文字列に対して match() メソッドを呼び出して、一致のリストを取得できます。

var matches = "{Sample} bob {text}".match(pattern);
于 2008-11-17T17:37:16.507 に答える
2

私はあなたが欲しいと思います:

var pattern = new RegExp("\{[a-zA-Z]+\}+", "g");

2 番目のオプションは、文字列全体を検索してすべての一致を返すように指示するフラグです。

詳細については、http: //www.evolt.org/article/Regular_Expressions_in_JavaScript/17/36435/を参照してください。

于 2008-11-17T17:25:47.667 に答える
1

私は自分の RegExp を作成するのが好きですが (実際にはグローバル フラグが必要なだけです)、プロトタイプ テンプレートTrimpath JSTなどを見たことがありますか?

独自のものを展開しても、上記の例ほど再利用が効率的ではない可能性があるためです。例えば:

String.prototype.template = function (obj) {
 return this.replace(/{([^{}]+)}/g,
  function (full, word) {
   return((typeof obj[word]==='string'||typeof obj[word]==='number')?obj[word]:full);
  }
 );
};

"The {adj1} {adj2} {noun}.".template({adj1: 'lazy',adj2: 'brown', noun: 'dog'})
==> "The lazy brown dog."

これは毎回正規表現を実行しますが、プロトタイプ テンプレートは基本的に 1 回実行すると思います。

于 2008-11-17T17:49:09.587 に答える
1

これはもう試しましたか?

<script>
var text = '<h2>{title}</h2>\n<p><a href="{url}">{content}</a></p>';
var regex = /\{[a-z]+\}/ig;
var result = text.match(regex);
for (var i = 0; i < result.length; i++) {
    console.debug(i + ". " + result[i]);
}
/*
gives:
0. {title}
1. {test}
2. {url}
3. {content}
*/
</script>
于 2008-11-17T17:58:38.133 に答える
0

execテストに使用して道を外れました。

于 2008-11-17T17:42:29.473 に答える