1

次の文字列があるとしましょう

def name1
 toSomething

def name2 
  toSomethingElse

どうすれば と を見つけることができますname1name2

を使用するstring.match(/(?:def) (.*)/)と、次のことがわかります。

name1
 toSomething

def name2 
  toSomethingElse

では、文字列を 1 行ずつ検索するにはどうすればよいでしょうか。

4

3 に答える 3

1

あなたは試すことができます:

/(?:def)\s+([^\s]+)/g

最初のグループには、必要なもの (name1など) があります。

ここを参照してください:http://regex101.com/r/rH0yH8

実行方法の例:

var s = "def name1\ntoSomething\n\ndef name2 \ntoSomethingElse"
var re = /(?:def)\s+([^\s]+)/g

while (x = re.exec(s)) {
    alert(x[1])
}
于 2013-02-13T22:14:53.707 に答える
1
/^def (.*)/gm

やります。フラグはgすべてのインスタンスに一致し、mフラグにより^​​、入力の先頭のみではなく、行の先頭で一致します。

を使用.execすると、ループして一度に 1 つずつ結果を取得できます。

var myString = 'def foo\n  boo\n\ndef bar\n  far\n';
for (var re = /^def (.*)/gm, match; (match = re.exec(myString));) {
  alert(match[1]);
}

または、文字列で使用.matchしてすべての結果を 1 つの配列に取得できますが、それではキャプチャ グループが得られません。

var myString = 'def foo\n  boo\n\ndef bar\n  far\n';
var re = /^def (.*)/gm;
var matches = myString.match(re);
于 2013-02-13T22:17:05.810 に答える
0

.改行と一致しないため、正規表現は最初の行で一致するはずです。

とは言え、やってみる/(?:def)\s+(\S*)/

于 2013-02-13T22:14:46.413 に答える