こんにちは私は正規表現に不慣れです。これは非常に簡単な質問かもしれません(うまくいけば)。
3種類の文字列に対して1つのソリューションを使用しようとしています
私がやろうとしていること(文字列をstrにする):
str.match(/(.*)(?!%*)/i)[1]
私の頭の中のこれは、「見つかった場合、 '%'までの任意のインスタンスに一致するか、それとも単に何かと一致する」ように聞こえます
Firebugの頭では、「何にでもマッチし、否定的な先読みを完全に無視する」ように聞こえます。また、怠惰にする-(.*)?
-役に立たないようです。
この特定の状況では、数字だけを照合しているので、/\d*/
します。いつでも適用できるように、一般的なルールを理解しようとしています。
誰かが私を助けてくれてとても親切でしょうか?
単純なのはどうですか
str.match(/[^%]*/i)[0]
つまり、ゼロ以上の文字に一致しますが、これは%
ではありません。
編集:</a>
まで解析する必要がある場合、pf文字に続いて</a>
を解析してから、 </a>
を破棄します。つまり、ネガティブの代わりにpositive先読みを使用する必要があります。
str.match(/.*?(?=<\/a>|$)/i)[0]
つまり、</a>
または文字列の終わりに到達するまで、ゼロ以上の文字を遅延して一致させます。
*?
は単一の演算子であり、(.*)?
は.*?
と同じではないことに注意してください。
(そして 通常どおり、単一の正規表現でHTMLを解析しないでください 。)
これはあなたが探しているものだと思います:
/(?:(?!%).)*/
.
は任意の文字に一致しますが、負の先読み(?!%)
によって、文字が%
ではないことが確認されます。センチネルが%
のような単一の文字である場合は、代わりに次のように、否定された文字クラスを使用できることに注意してください。
/[^%]*/
ただし、</a>
のような複数文字のセンチネルの場合、先読みアプローチを使用する必要があります。
/(?:(?!</a>).)*/i
これは、実際には「一度に0個以上の文字を照合しますが、次の文字がシーケンス</a>
または</A>
の始まりであることが判明した場合、それを消費せずに停止します」と言っています。
exact検索文字列を使用する最も簡単な方法は、正規表現をスキップしてindexOf
を使用することです。例:
// String to be searched
var s = "Here is a <a>link</a>."
// String to find
var searchString = "</a>";
// Final match
var matched = "";
var c = s.indexOf(searchString);
if (c >= 0)
{
// Returns the portion not including the search string;
// in this example, "Here is a <a>link". If you want the
// search string included, add the length of the search
// string to c.
matched = s.substring(c);
}
私はちょうどあなたがそれを言った方法を正確に書いた:
str.match(/(^[^%]*$)|^([^%]*)%.*/i)
これは、「%」を含まない文字列、または%を含む文字列の最初の部分に一致します。 1番目または2番目のグループから結果を取得する必要があります。
編集:これはまさにあなたが望むものです
str.match(/(?:^[^%]*$)|^(?:[^%]*)(?=%)/)
したがって、正規表現の読み取りは、%を含まない任意の文字列に一致します。OR(それ以外の場合は一致)最初の%の前のすべての文字
45、45%、および任意の長さの任意の数(182%、18242など)を使用するには
str.match(/([0-9]+)([%]?)/)[1];
空の文字列を一致させる必要がある場合は、それも^ $として含める必要があります。match( "...")[1] 空の文字列については未定義になりますに注意してください。一致をテストしてから[0]を確認するか、[1]が未定義かどうかを確認する必要があります。
str.match(/([0-9]+)([%]?)|^$/)
正確に2桁を一致させる必要がある場合は、{2,2}を使用して、式を開始行文字と終了行文字の間に固定します。 "^(exp)$ = "
str.match(/^([0-9]{2,2})([%]?)$/)[1];