0

JavaScript/RegExpを使用して別の文字列から文字列を抽出したい。これが私が得たものです:

var string = "wp-button wp-image-45 wp-label";
string.match(/(?:(?:.*)?\s+)?(wp-image-([0-9]+))(:?\s(?:.*)?)?/);
// returnes: ["wp-button ", "wp-image-45", "45", undefined]

「wp-image-45」が欲しいだけなので、次のようになります。

  • (オプション)任意の文字
  • (オプション)その後に空白が続く
  • (必須)その後に「wp-image-」が続く
  • (必須)その後に任意の番号が続く
  • (オプション)その後にwhitespacy
  • (オプション)その後に任意の文字

ここに何が欠けていますか?それは単なるブラケットのようなものですか、それともそれ以上ですか?私も試しました

string.match(/(?:(?:.*)?\s+)?(?=(wp-image-([0-9]+)))(?=(:?\s(?:.*)?)?)/)

編集:結局、私はただ番号が欲しいだけです。しかし、私もその間にこのステップを踏みます。

4

2 に答える 2

2

正規表現は文字列の先頭から照合を開始する必要がないため、空白や任意の文字を照合する必要はありません。また、「任意の文字」には空白が含まれます (特定のモードの改行を除く)。

必要なのはこれだけです。

string.match(/\bwp-image-(\d+)\b/)

これにより、たとえば、「wp-image-123」が一致するグループ 0 にキャプチャされ、「123」が一致するグループ 1 にキャプチャされます。

\b「単語境界」を意味し、「abcwp-image-123def」と一致しないことを保証します。単語境界は、非単語文字の後に単語文字が続く場所、またはその逆の場所として定義されます。単語の文字は、文字、数字、またはアンダースコアで構成されます。

また、私は単に便宜上\d代わりに使用しました。[0-9]それらはわずかに異なる意味を持ちます(\d他の言語で数字と見なされる文字にも一致します)が、それはあなたの場合には違いはありません.

于 2013-02-03T17:16:49.047 に答える
0

その周囲のもののすべてがオプションであり、あなたが望むのは数字だけである場合、その「wp-image-」プレフィックスを除いて、そのものを一致させる意味はありません:

var string = "wp-button wp-image-45 wp-label";
string.match(/wp-image-([0-9]+)/);
于 2013-02-03T17:19:36.060 に答える