2016-11-16 25 views
2

我有我要替換某些實體父字符串:不能在父母串認子的JQuery

FIDDLE example here

var parent_string = "Steven Paul Steve Jobs (February 24, 1955 – October 5, 2011) was an American information technology entrepreneur and inventor who worked with Steve Wozniak."; 

var entities = { 
PERSON: ['Steven Paul Steve Jobs', 
    'Steve Wozniak' 
], 
DATE: ['February 24, 1955', 
    'October 5, 2011' 
] 
}; 

我現在通過實體和檢查值是否是子環的父字符串。如果是這樣,我用字符串"REPLACED"替換它們。

var replacement = 'REPLACED'; 

$.each(entities, function(key, value) { 
    $.each(this, function(index, val) { 
    console.log(val); 
    tester = parent_string.indexOf(val); 
    console.log(tester); 
    var re = new RegExp(val); 
    parent_string = parent_string.replace(re, replacement); 
}); 
console.log(parent_string); 
}); 

現在這是我的問題:這適用於除'Steven Paul Steve Jobs'以外的實體。

的預期結果會是這個字符串:

"REPLACED (REPLACED – REPLACED) was an American information technology entrepreneur and inventor who worked with REPLACED."

如果我更手動執行此操作是這樣的:

str = "Steven Paul Steve Jobs (February 24, 1955 – October 5, 2011)"; 
val = "Steven Paul Steve Jobs"; 
str.indexOf(val); 

...這似乎工作。

爲什麼這在我的循環中不起作用?

+0

您可以粘貼您從日誌語句中獲得的輸出以及您期望的內容嗎? –

+0

@AlejandroC。是。我已經添加了這個。 –

回答

2

看來這些名稱之間的空格是一些Unicode空格。我建議用\s+模式替換所有文字空間的正則表達式:

var re = new RegExp(val.replace(/\s+/g, '\\s+')); 
         ^^^^^^^^^^^^^^^^^^^^^^^^ 

然後,正則表達式看起來像/Steven\s+Paul\s+Steve\s+Jobs/\s將匹配所有的空格。

查看updated fiddle

1

從代碼複製到我的IDE時,您的代碼按照您的預期工作。 由於parent-string的源代碼包含隨機位置中的轉義HTML實體"Steven Paul Steve Jobs (February...,因此它不匹配直接字符Steven Paul Steve Jobs,因此它不能在小提琴中完全工作。在小提琴外試試或調整它,以確保您的字符串的源代碼在所有情況下均未轉義。 (在Chrome中檢查的小提琴代碼)。