_("test1: "+ ("slayers get more".match(RegExp("^" + "slayers get magic"), "g")));
「slayers get m」という結果を期待していますが、代わりに null を取得しますか?
代わりに正規表現リテラルを入力すると機能します。
別の質問: 結果が "slayers get" になるように、単語全体のみに一致させるにはどうすればよいですか?
どうも
_("test1: "+ ("slayers get more".match(RegExp("^" + "slayers get magic"), "g")));
「slayers get m」という結果を期待していますが、代わりに null を取得しますか?
代わりに正規表現リテラルを入力すると機能します。
別の質問: 結果が "slayers get" になるように、単語全体のみに一致させるにはどうすればよいですか?
どうも
は、 の 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 つの単語が比較され、その時点まで一致した単語が返されます (一致する単語がない場合は空の文字列が返されます)。
2 つの問題があります。
match
引数は 1 つしか取りませんが、2 つ渡しています。"g"
をRegExp
コンストラクターに渡したいと思います:new RegExp("^" + "slayers get magic", "g")
"slayers get more"
と一致しないため、もちろん を返します。/^slayers get magic/
match
null
もしあなたがそうするなら:
"slayers get more".match(new RegExp("^" + "slayers get m"))
その後、期待する結果が得られます。
あなたの問題は、正規表現演算子がどのように機能するかについての誤解です。あなたの正規表現「^slayers get magic」が言っているのは、文字列の先頭にある「slayers get magic」というフレーズを探すことです。これは、文字列の先頭が完全に一致しない限り、null を返すことを意味します。あなたがする必要があるのは、すべての単語をオプションにすることです。そうすれば、一致しない単語を削除できます。(私は正規表現の専門家ではありません。このサイトを読むことを強くお勧めします。これは素晴らしい正規表現のリソースです)
"slayers get more".match(RegExp("^(slayers)? (get)? (magic)?", "g"))
このコードは、各単語の前後にオプションの演算 (?) を追加して、一致が利用可能なものと一致するようにします。これは以下を返します:
["slayers get "]
null の代わりに。