匹配最后一个点之后的文本字符串

Match string in text after last dot

本文关键字:文本 字符串 之后 最后一个      更新时间:2023-09-26

我有以下字符串:

var a = "vm.model.password";
var b = "vm.model.passwordCheck";

我有以下内容:

var sa = "Password";
var sb = "PasswordCheck";

我需要检查 sa 是否包含在 a 中,sb 包含在 b 中。

所以为了比较,我需要检查点后面的 a 或 b 中的字符串。并检查 sa 是否等于该字符串,但首先将 sa 的第一个字母设置为小写。

我正在做这样的事情:

a.indexOf(sa.toLowerCase()) > -1;

但问题是 sa 将是 b 到 的匹配项,而 sb 不会是 b 的匹配项,因为它以 P 而不是 p 开头。

最好的方法是什么?

至于得到最后一个词:

使用比 split() 快得多的 str.lastIndexOf('.') 怎么样:

var a = "vm.model.password";
var b = "vm.model.passwordCheck";
console.log(a.slice(a.lastIndexOf('.') + 1))
// a .toLowerCase at the end should do it

JSbin: https://jsbin.com/komowi/edit?js,console

鉴于您如何遇到大写/小写字母的问题,可能是时候查看带有"i"标志的正则表达式了,这意味着它将与 caseMDN 正则表达式匹配这不需要,但肯定会有所帮助

你可以做这样的事情,如果你想检查的单词总是在最后。

var aArray = a.split(".");
sa.toLowerCase() === aArray[aArray.length-1].toLowerCase();

使用 pop() 可以得到数组的最后一个元素。

if( sa.toLowerCase() == a.split(".").pop() ){
 //your code here
}

这个怎么样:

a.toLowerCase().split('.').pop() === sa.toLowerCase()
b.toLowerCase().split('.').pop() === sb.toLowerCase()

像...

var a = "vm.model.password";
var b = "vm.model.passwordCheck";
var sa = "Password";
var sb = "PasswordCheck";
var endA = a.substring(a.lastIndexOf('.') + 1).toLowerCase();
var endB = b.substring(a.lastIndexOf('.') + 1).toLowerCase();
if (endA.includes(sa.toLowerCase())) {
    alert("A match");
}
if (endB.includes(sb.toLowerCase())) {
    alert("B match");
}

显然,您应该检查它是否包含"."或 lastIndexOf 结果是否为>= 0 等,但为了简单起见,我在这里避免了此类验证。