12

注文番号を最後に付けたい任意の数の文字を使用できるテキスト文字列があります。そうすれば、注文番号を再度使用する必要があるときに、注文番号を削除できます。=数値が可変長である可能性があるので、文字列の符号の後のすべてをキャッチする正規表現を実行したいと思います?order_num=

したがって、文字列全体は

"aijfoi aodsifj adofija afdoiajd?order_num=3216545"

オンラインの正規表現ジェネレーターを使用しようとしましたが、うまくいきませんでした。?order_num=203823誰かが最後の数字を抽出してそれらを変数に入れ、前に来るものをそれ自身の変数に入れるのを手伝ってくれませんか?

私自身の試みをいくつか投稿しますが、失敗と混乱が予想されます。

4

3 に答える 3

22
var s = "aijfoi aodsifj adofija afdoiajd?order_num=3216545";

var m = s.match(/([^\?]*)\?order_num=(\d*)/);
var num = m[2], rest = m[1];

ただし、正規表現は遅いことに注意してください。使用indexOfおよびsubstring/slice可能な場合。例えば:

var p = s.indexOf("?");
var num = s.substring(p + "?order_num=".length), rest = s.substring(0, p);
于 2012-06-04T22:44:03.420 に答える
10

これには正規表現は必要ないと思います。

var str="aijfoi aodsifj adofija afdoiajd?order_num=3216545";
var n=str.split("?");

nその場合、配列になります。ここで、インデックス0は?の前にあります。インデックス1は後です。

もう一つの例:

var str="aijfoi aodsifj adofija afdoiajd?order_num=3216545";
var n=str.split("?order_num=");

結果が表示されます: n[0]=aijfoi aodsifj adofija afdoiajdおよび n[1]=3216545

于 2012-06-04T22:44:47.180 に答える
4

最初のインスタンスからサブストリングを作成してから、?正規表現を使用して式の複雑さのほとんどを取り除き、パフォーマンスを向上させることができます(これはおそらく無視できる程度であり、何千回も繰り返さない限り心配する必要はありません)。 。order_num=さらに、これは、必ずしもクエリ文字列の最後だけでなく、クエリ文字列内の任意の場所で一致します。

var match = s.substr(s.indexOf('?')).match(/order_num=(\d+)/);
if (match) {
  alert(match[1]);
}
于 2012-06-04T23:06:51.293 に答える