javascript - 无法识别父字符串 JQuery 中的子字符串

标签 javascript jquery regex string

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

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)是一位与 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/

相关文章:

javascript - 使用 Javascript 将 13 位 Unix 时间戳转换为 DateTime

javascript - 刷新页面时 BrowserRouter 显示错误 | React-router-v4

Python:使用正则表达式捕获数据

Python子进程: capture output of ffmpeg and run regular expression against it

javascript - 重新绘制传单中的标记

javascript - js/jQuery : Stop event listener

php - 在页面加载时显示进度轮

javascript - 重新排列图 block

javascript - 如何使用 jQuery 引用 HTML5 视频元素?

JavaScript - 如何删除字符串中的某些空格