使用RegExp获取字符串的最后一次出现

Get the last occurrence of a string using RegExp

本文关键字:最后一次 字符串 RegExp 获取 使用      更新时间:2023-09-26

假设我的文本在下面:

购买这款手机的一个令人信服的原因可能是它的显示屏。当然,我们会喜欢全高清,但又一次,我们闭嘴,因为有力的价格标签。屏幕响应性也很好。

我只想获得"the"字符串在我的文本中最后出现的索引。(使用RegExp)

var re = new RegExp("''b"+"the"+"''b",'g');
var pos = re.lastIndex;

只给出字符串the第一次出现的位置。
有什么建议吗?

为什么需要正则表达式来查找子字符串的最后一次出现。您可以使用本地.lastIndexOf()方法:

re.lastIndexOf("the");

单向;

var pos = -1;
while ((match = re.exec(str)) != null)
    pos = match.index;
alert("last match found at " + pos);

正则表达式为/'bthe'b(?!(.|'n)*'bthe'b)/(没有全局标志!)…意思是"the"后面不跟"the"

测试:

var re = new RegExp('''b' + input + '''b(?!(.|''n)*''b' + input + '''b)');
var pos = re.test(str) ? re.exec(str).index : -1;

这是一个有效的解决方案,即使是非全局正则表达式:

    function regexLastIndexOf(str, regex) {
        regex = regex.global
            ? regex
            : new RegExp(regex.source, 'g' + (regex.ignoreCase ? 'i' : '') + (regex.multiLine ? 'm' : ''));
        var lastIndexOf = -1;   
        var nextStop = 0;
        var result;
        while ((result = regex.exec(str)) != null) {
            lastIndexOf = result.index;
            regex.lastIndex = ++nextStop;
        }
        return lastIndexOf;
    }