查找并删除与句子中的子字符串匹配的单词

find and remove words matching a substring in a sentence

是否可以使用正则表达式查找包含子字符串的句子中的所有单词?

示例:

var sentence = "hello my number is 344undefined848 undefinedundefined undefinedcalling whistleundefined";

我需要找到这个句子中包含 'undefined' 的所有单词并删除这些单词。

Output should be "hello my number is ";

仅供参考 - 目前我标记化 (javascript) 并遍历所有标记以查找和删除,然后合并最终字符串。我需要使用正则表达式。请帮忙

谢谢!

您可以使用:

str = str.replace(/ *\b\S*?undefined\S*\b/g, '');

RegEx Demo

当然可以。

像单词开头,零个或多个字母,"undefined",零个或多个字母,单词结尾应该这样。

单词边界 \b 在字符 class 之外,因此:

\b\w*?undefined\w*?\b

使用非贪婪重复来避免字母匹配 tryig 来匹配 "undefined" 并导致大量回溯。

编辑[a-zA-Z] 切换为 \w 因为该示例包含 "words" 中的数字.

\S*undefined\S*

尝试 empty string 的这个简单的 regex.Replace。查看演示。

https://www.regex101.com/r/fG5pZ8/5

由于有足够的正则表达式解决方案,这里是另一个 - 使用数组和简单的函数来查找字符串中字符串的出现:)

尽管代码看起来更 "dirty",但它实际上比正则表达式运行得更快,因此在处理 LARGE 字符串时考虑它可能是有意义的

    var sentence = "hello my number is 344undefined848 undefinedundefined undefinedcalling whistleundefined";
    var array = sentence.split(' ');
    var sanitizedArray = [];

    for (var i = 0; i <= array.length; i++) {
        if (undefined !== array[i] && array[i].indexOf('undefined') == -1) {
            sanitizedArray.push(array[i]);
        }
    }

    var sanitizedSentence = sanitizedArray.join(' ');

    alert(sanitizedSentence);

Fiddle: http://jsfiddle.net/448bbumh/

你可以像这样使用str.replace函数

str = str.replace(/undefined/g, '');