2016-03-21 62 views
1

我有以下字符串:匹配字符串文本中最後一個點後

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

和我有以下幾點:

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

我需要檢查SA包含在和某人在B 。

因此,爲了比較我需要檢查點或之後的a或b中的字符串。 並檢查sa是否等於該字符串,但首先將sa的第一個字母設置爲小寫。

我在做這樣的事情:

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

但問題是,SA將b與和某人,因爲它與P和不P開始就不會成爲B A比賽的匹配。

這樣做的最好方法是什麼?

+0

之前我提供了一個答案,你能解釋一下你在做什麼,爲什麼?我懷疑你的方法不是完成你想要完成的最好的方法,但我不能肯定地說沒有更多的信息。 – dman2306

+0

基本上,在Angular應用程序上,我在HTML上有這樣的內容。 vm.user.password是Angular模型的屬性。但是API返回與諸如Password等名稱相關的錯誤,例如,沒有vm.model。在Angular中使用CamelCase,但API始終以大寫字母返回PasswordCheck。因此,我需要將API返回的內容映射到HTML中使用的角色 –

+0

然後說實話,爲什麼不創建映射?你將寫出所有這些邏輯,然後當你有一個名爲'userName'的字段,並且API有'UName'或類似不適合模式的東西時會發生什麼?只需保持一個關聯數組映射到另一個。 – dman2306

回答

3

至於獲得的最後一個字:關於使用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

考慮如何您遇到大寫/小寫字母問題,可能是查看RegExp whi的時候了ch有一個'我'的標誌就可以了,這意味着它將與案例MDN RegExp 這不是需要每說,但肯定會幫助沿着路

+0

你有一個壞的;在console.log之後。否則,這種方式會比分割更快。 – dman2306

+0

編輯 - 謝謝 – JordanHendrix

+1

重要?但是,split需要整個字符串被迭代,然後它必須構造一個數組。就你而言,只要我打到最後。 (從最後開始)我紓解了。所以如果我的字符串是500個字符和。結果是3,你的代碼只需要迭代3個字符,而不是500分割。 – dman2306

1

你可以做這樣的事情,如果你想檢查的單詞總是在最後。

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

'[2]'應該是動態的,我猜... – Rayon

+0

也需要'toLowerCase'。當'sb'變成小寫字母時,變成'passwordcheck',而b變成'passwordCheck'並且不匹配 – dman2306

+0

我不確定它總是vm.model.password。它可能是vm.model.test.password,所以我需要在最後一個點後得到它 –

1

用pop()你得到數組的最後一個元素。

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

喜歡的東西...

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等等,但我在這裏簡單地避免了這種驗證。

+1

'.contains()'更改爲'.includes()' – 2016-03-21 17:47:24

1

如何:

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

b.toLowerCase().split('.').pop() === sb.toLowerCase() 
+1

我認爲這是目前爲止提供的最低效的解決方案。你需要創建一個數組然後修改數組。這應該只使用字符串操作來完成。 – dman2306

+0

我想要快,因爲我在每個API請求上都有幾個字符串。所以流行對此很緩慢,對嗎? –

+0

@Miguel當我說「慢」時我們會說毫秒。這就是說,它不僅僅是pop(它必須修改一個數組),它是split(),它必須構造一個數組,'lastIndexOf'將是最快的方法。 – dman2306

相關問題