5

正規表現を検索し、最後に検索を開始するJavaScript文字列関数はありますか?

そうでない場合、正規表現のインデックスを最後から検索する最も高速かつ/または最もクリーンな方法は何ですか?

正規表現の例:

/<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi
4

7 に答える 7

1

次のような逆関数を作成できます。

function reverse (s) {
  var o = '';
  for (var i = s.length - 1; i >= 0; i--)
    o += s[i];
  return o;
}

そして使用する

var yourString = reverse("Your string goes here");
var regex = new Regex(your_expression);
var result = yourString.match(regex);

別のアイデア: 単語を逆順に検索したい場合

function reverseWord(s) {
   var o = '';
   var split = s.split(' ');

  for (var i = split.length - 1; i >= 0; i--)
    o += split[i] + ' ';
  return o;
}

var yourString = reverseWord("Your string goes here");
var regex = new Regex(your_expression);
var result = yourString.match(regex);
于 2013-10-18T09:23:09.377 に答える
1

アンドレアスはコメントからこれを与えました:

https://stackoverflow.com/a/274094/402037

String.prototype.regexLastIndexOf = function(regex, startpos) {
    regex = (regex.global) ? regex : new RegExp(regex.source, "g" + (regex.ignoreCase ? "i" : "") + (regex.multiLine ? "m" : ""));
    if(typeof (startpos) == "undefined") {
        startpos = this.length;
    } else if(startpos < 0) {
        startpos = 0;
    }
    var stringToWorkWith = this.substring(0, startpos + 1);
    var lastIndexOf = -1;
    var nextStop = 0;
    while((result = regex.exec(stringToWorkWith)) != null) {
        lastIndexOf = result.index;
        regex.lastIndex = ++nextStop;
    }
    return lastIndexOf;
}

これにより、必要な機能が提供され、正規表現をテストしたところ、成功しました。じゃあこれ使うわ

于 2013-10-18T09:47:40.237 に答える
0
var m = text.match(/.*(<\/?([a-z][a-z0-9]*)\b[^>]*>?)/i);
if (m) {
    textFound = m[1];
    position = text.lastIndexOf(textFound);
}

.* を使用してできるだけ多くのテキストをスキップし、見つかったテキストをキャプチャして lastIndexOf で検索します

編集:

テキストが見つかった場合は、lastIndexOf で検索する必要はありません。m[0] には完全な一致 (すべての最初のパディングを含む) が含まれ、m[1] には検索されたテキストが含まれます。したがって、見つかったテキストの位置は m[0].length - m[1].length です

var m = text.match(/.*(<\/?([a-z][a-z0-9]*)\b[^>]*>?)/i);
if (m) {
    textFound = m[1];
    position = m[0].length - m[1].length;
}
于 2013-10-18T09:52:53.593 に答える
0

それは、正確に何を検索したいかによって異なります。string.lastIndexOf使用する正規表現の内部で or を使用できます$(文字列の末尾)。

更新: 正規表現を試してください

/<\/?([a-z][a-z0-9]*)\b[^>]*>?[\w\W]*$/gi
于 2013-10-18T09:24:44.247 に答える