不能识别父-字符串JQuery中的子字符串

Cannot recognise substring in parent-string JQuery

本文关键字:字符串 JQuery 不能 识别      更新时间:2023-09-26

我有一个父字符串,我想替换某些实体:

这里的例子

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);

…这似乎有效。

为什么这在我的循环中不起作用?

这些名字之间的空白似乎是一些Unicode空白。我建议用正则表达式中的's+模式替换所有文字空间:

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

然后,正则表达式看起来像/Steven's+Paul's+Steve's+Jobs/'s将匹配所有这些空白。

查看更新后的小提琴。

当从问题复制到我的IDE时,您的代码按预期工作。它不能完全工作,因为parent-string的源代码在随机位置包含转义的HTML实体"Steven Paul Steve Jobs (February...,因此它不匹配直接字符Steven Paul Steve Jobs。在外部尝试它,或者调整它以确保字符串的源代码在所有情况下都没有转义。