0
_("test1: "+ ("slayers get more".match(RegExp("^" + "slayers get magic"), "g")));

「slayers get m」という結果を期待していますが、代わりに null を取得しますか?

代わりに正規表現リテラルを入力すると機能します。

別の質問: 結果が "slayers get" になるように、単語全体のみに一致させるにはどうすればよいですか?

どうも

4

3 に答える 3

2

は、 の 2 番目の引数ではなく、 の 2 番目の"g"引数である必要があります。(ただし、文字列の先頭から一致する a で始まる正規表現では、まったく必要ありません。)RegExp().match()^"g"

さらにnew、次のように使用する方が「より正しい」でしょう。

_("test1: "+ ("slayers get more".match(RegExp("^" + "slayers get magic", "g"))));

ただし、のRegExp()有無にかかわらず機能する場合は信じていnewます。

「slayers get m」という結果を期待していますが、代わりに null が返されますか?

null一致しないため、その文字列とその正規表現の正しい結果です。つまり、正規表現は一致するかしないか (この場合は一致しない) のどちらかであり、部分一致した文字列の部分は返しません。

あなたが本当にやりたいことは、2番目の文字列の先頭に一致する最初の文字列のその部分を、最初の異なる文字を含まないまで返すことです。もしそうなら、これを試してください:

function getCommon(s1,s2) {
   var i = 0, len = s1.length;
   while (i < len && s1.charAt(i) === s2.charAt(i))
      i++;
   return s1.substr(0,i);
}

_("test1: "+ getCommon("slayers get more", "slayers get magic"));

「別の質問: どうすれば単語全体のみを一致させて、結果が "slayers get" になるようにできますか?」

以前の関数と同じ考え方に基づいて、一度に 1 つの単語を比較するだけです。

function getCommon(s1,s2) {
   var a1 = s1.split(" "),
       a2 = s2.split(" "),
       len = a1.length,
       i = 0;
   while (i < len && a1[i] === a2[i])
      i++;
   return a1.slice(0,i).join(" ");
}

これにより、両方の文字列が個々の単語に分割され、不一致が見つかるまで一度に 1 つの単語が比較され、その時点まで一致した単語が返されます (一致する単語がない場合は空の文字列が返されます)。

デモ: http://jsfiddle.net/j8zsU/1/

于 2012-08-02T03:53:51.180 に答える
0

2 つの問題があります。

  1. match引数は 1 つしか取りませんが、2 つ渡しています。"g"RegExpコンストラクターに渡したいと思います:new RegExp("^" + "slayers get magic", "g")
  2. 文字列は正規表現"slayers get more"と一致しないため、もちろん を返します。/^slayers get magic/matchnull

もしあなたがそうするなら:

"slayers get more".match(new RegExp("^" + "slayers get m"))

その後、期待する結果が得られます。

于 2012-08-02T03:53:17.567 に答える
0

あなたの問題は、正規表現演算子がどのように機能するかについての誤解です。あなたの正規表現「^slayers get magic」が言っているのは、文字列の先頭にある「slayers get magic」というフレーズを探すことです。これは、文字列の先頭が完全に一致しない限り、null を返すことを意味します。あなたがする必要があるのは、すべての単語をオプションにすることです。そうすれば、一致しない単語を削除できます。(私は正規表現の専門家ではありません。このサイトを読むことを強くお勧めします。これは素晴らしい正規表現のリソースです)

"slayers get more".match(RegExp("^(slayers)? (get)? (magic)?", "g"))

このコードは、各単語の前後にオプションの演算 (?) を追加して、一致が利用可能なものと一致するようにします。これは以下を返します:

["slayers get "]

null の代わりに。

于 2012-08-02T03:56:52.483 に答える