正規表現を検索し、最後に検索を開始するJavaScript文字列関数はありますか?
そうでない場合、正規表現のインデックスを最後から検索する最も高速かつ/または最もクリーンな方法は何ですか?
正規表現の例:
/<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi
次のような逆関数を作成できます。
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);
アンドレアスはコメントからこれを与えました:
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;
}
これにより、必要な機能が提供され、正規表現をテストしたところ、成功しました。じゃあこれ使うわ
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;
}
それは、正確に何を検索したいかによって異なります。string.lastIndexOf
使用する正規表現の内部で or を使用できます$
(文字列の末尾)。
更新: 正規表現を試してください
/<\/?([a-z][a-z0-9]*)\b[^>]*>?[\w\W]*$/gi