我有一个父字符串,我想替换其中的某些实体:
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)是一位与 REPLACED 合作的美国信息技术企业家和发明家。”
如果我像这样更手动地执行此操作:
str = "Steven Paul Steve Jobs (February 24, 1955 – October 5, 2011)";
val = "Steven Paul Steve Jobs";
str.indexOf(val);
...似乎有效。
为什么这在我的循环中不起作用?
最佳答案
这些名称之间的空格似乎是一些 Unicode 空格。我建议将正则表达式中的所有文字空格替换为 \s+
模式:
var re = new RegExp(val.replace(/\s+/g, '\\s+'));
^^^^^^^^^^^^^^^^^^^^^^^^
然后,正则表达式将类似于 /Steven\s+Paul\s+Steve\s+Jobs/
并且 \s
将匹配所有这些空格。
请参阅updated fiddle 。
关于javascript - 无法识别父字符串 JQuery 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642638/