【问题标题】:Find the index of the last word character ( e.g.: /\w/ ) in a string with JS用JS查找字符串中最后一个单词字符的索引(例如:/\w/)
【发布时间】:2014-05-07 00:23:54
【问题描述】:

我正在寻找一种简单、快速的方法来查找字符串中最后一个非下划线的单词字符(即数字或字母)的索引.

示例:

lastCharacterIndex("hello world!"); => 10

【问题讨论】:

  • 你可以将字符串的字符从头到尾循环,并检查它的ASCII码是数字还是字母

标签: javascript regex


【解决方案1】:

使用RegExp.lastIndex

s = "hello world!";
re = /[a-z0-9](?=\W*$)/gi; // global flag is important
re.exec(s);

index = re.lastIndex-1; // 10

【讨论】:

  • 已接受。感谢大家的回答,每一个都完美运行,但@anubhava 的在 10,000 次迭代后是最快的。
  • 它可能不是最快的,它使用前瞻并从行首开始。最快的可能是从贪婪匹配的行尾开始。
【解决方案2】:
function lastCharacterIndex(str){
    var m = str.match(/\w[^\w]*$/);
    return null===m ? -1 : str.lastIndexOf(m[0]);    
}

【讨论】:

    【解决方案3】:

    您可以搜索仅后跟非字母非数字的字母或数字,并获取匹配项的索引(如果有匹配项)。

    var s = "hello world!";
    var re = /[a-z\d][\W_]*$/i;
    var match = re.exec(s);
    var index = match ? match.index : -1;
    alert(index);  // 10
    

    JS中RegExp的匹配是一个Array,但它有两个额外的非整数属性:“index”和“input”。

    【讨论】:

      【解决方案4】:

      不确定它的索引,但最后一个字母应该是最后一个
      使用此匹配 0 的字符

       [\S\s]*[^\W_]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        相关资源
        最近更新 更多