0

何度も聞かれましたが、うまくいきません...

私は次のような文字列を持っています:

"text!../tmp/widgets/tmp_widget_header.html"

そして、このように抽出しようとしていますwidget_header

var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )

しかし、それは機能しません。

誰かが私がここで間違っていることを教えてもらえますか?

ありがとう!

4

3 に答える 3

3

これは印刷しますwidget_header

var s = "text!../tmp/widgets/tmp_widget_header.html";
var matches = s.match(/tmp_(.*?)\.html/);
console.log(matches[1]);
于 2012-10-12T14:40:56.490 に答える
1
var s = "text!../tmp/widgets/tmp_widget_header.html",
    re = /\/tmp_([^.]+)\./;

var match = re.exec(s);

if (match)
    alert(match[1]);

これは一致します:

  • /キャラクター_
  • キャラクターtmp_
  • キャラクターではないキャラクターの1つ以上.。これらはキャプチャされます。
  • .キャラクター_

一致するものが見つかった場合1は、結果の配列のインデックスになります。

于 2012-10-12T14:39:15.187 に答える
1

あなたのコードでは:

var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )

あなたが言っています:

「任意の数の文字で始まり、「tmp_」、入力の終わり、任意の数のピリオドが続く任意の文字列に一致します。」

.*   : Any number of any character (except newline)
tmp_ : Literally "tmp_" 
$    : End of input/newline - this will never be true in this position
\.   : " . ", a period
\.*  : Any number of periods

さらに、regex()関数を使用する場合は、スラッシュを使用した正規表現表記のようにvar re = new RegExp("ab+c")、または使用しない文字列表記を使用して、文字列を渡す必要があります。var re = new RegExp('ab+c')また、余分な括弧または欠落した括弧があり、実際に文字がキャプチャされていません。

あなたがしたいことは:

"入力の開始、任意の文字の1つ以上、" tmp_ "、単一のピリオド、任意の文字の1つ以上、入力の終了が続く文字列を検索します。t 1つ以上の文字が含まれています。その文字列をキャプチャしてください。」

それで:

var string = "text!../tmp/widgets/tmp_widget_header.html";
var re = /^.+tmp_(.+)\..+$/; //I use the simpler slash notation

var out = re.exec(string);   //execute the regex

console.log(out[1]);         //Note that out is an array, the first (here only) catpture sting is at index 1

この正規表現の/^.+tmp_(.+)\..+$/意味:

^    : Match beginning of input/line
.+   : One or more of any character (except newline), "+" is one or more
tmp_ : Constant "tmp_"
\.   : A single period
.+   : As above
$    : End of input/line

これRegEx('^.+tmp_(.+)\..+$');を使用する場合RegEx();は、スラッシュマークがなく、代わりに引用符(シングルまたはダブルで機能します)を使用して文字列として渡すこともできます。

これで、これも一致var string = "Q%$#^%$^%$^%$^43etmp_ebeb.45t4t#$^g"out == 'ebeb'ます。したがって、特定の用途に応じて、任意の文字(改行を除く)を表すために使用される「。」を括弧で囲まれた「[]」文字リストに置き換えることができます。これにより、不要な結果が除外される可能性があります。マイレージは異なる場合があります。

詳細については、https ://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressionsをご覧ください。

于 2012-10-12T15:23:20.997 に答える