Javascript Regex 使用字典中的多个单词从第一人称转换为第二人称

标签 javascript regex

我正在编写一个 Javascript 函数来将句子从第一人称转换为第二人称。我目前的测试功能如下:

function statementCreator() {
    var sentence = "I went to the movies with my friend, Sally. Sally says that I'm her best friend.";

    var transforms = {
        "I" : "YOU", 
        "ME" : "YOU", 
        "MY" : "YOUR", 
        "AM" : "ARE", 
        "MINE" : "YOURS",
        "I'M" : "YOU'RE"
    };

    var pattern = `\\b(?:${Object.keys(transforms).join('|')})\\b`;
    var re = new RegExp(pattern, "g");

    str = sentence.toUpperCase().replace(re, matched => transforms[matched]);
    console.log(str);
}
这将创建以下正则表达式模式:
/\b(?:I|ME|MY|AM|MINE|I'M)\b/g
产生以下输出:
YOU WENT TO THE MOVIES WITH YOUR FRIEND, SALLY. SALLY SAYS THAT YOU'M HER BEST FRIEND.
我对 Javascript 非常陌生,因此,这很可能是一种糟糕的方法,当然这让我有了 YOU'M 这个词。作为我输出的一部分。
但是,理想情况下,我想要一个可以:
  • 允许我将新条目添加到字典中,它们将被添加到替换中(就像这里的 ${Object.keys(transforms).join('|')} 部分所做的那样)
  • 显然,能够处理I'M等条目.

  • 什么是这样做的好方法,以防万一有人知道完全不同的方法,我可以更轻松/正确地从第一人称更改为第二人称,我会 那个答案也是!!
    谢谢!

    最佳答案

    单词边界不会给出正确的结果,因为您有像 ' 这样的非单词字符在 I'M并且因为 I放在 I'M 之前交替 \bI\b满足 I'm 中的匹配并使其成为 YOU'm .
    为了解决这个问题,您可以在正则表达式中使用稍微不同的方法来使用此解决方案,即

    (?<!\w)(?:I|ME|MY|AM|MINE|I'M)(?![\w'])
    
    RegEx Demo
  • (?<!\w) : Negative Lookbehind 以确保我们在匹配前没有单词字符
  • (?![\w']) : Negative Lookahead 以确保我们没有单词字符或 '赛后

  • 代码:

    function statementCreator() {
        var sentence = "I went to the movies with my friend, Sally. Sally says that I'm her best friend. I, the current narrator, went to the movies.";
    
        var transforms = {
            "I" : "YOU", 
            "ME" : "YOU", 
            "MY" : "YOUR", 
            "AM" : "ARE", 
            "MINE" : "YOURS",
            "I'M" : "YOU'RE"
        };
    
        var pattern = `(?<!\\w)(?:${Object.keys(transforms).join('|')})(?![\\w'])`;
        var re = new RegExp(pattern, "ig");
    
        str = sentence.toUpperCase().replace(re, matched => transforms[matched]);
        console.log(str);
    }
    
    statementCreator();

    关于Javascript Regex 使用字典中的多个单词从第一人称转换为第二人称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68677212/

    相关文章:

    javascript - 如何删除数组数据中特定字符之前的所有字符

    java - 删除Java字符串中不需要的字符

    javascript - 正则表达式用工作表名称替换 Excel 公式

    c# - 在单个正则表达式中仅选择选择的数字部分

    c# - 解析十六进制内容的文本文件

    javascript - innerHTML 显示后迅速消失

    javascript - AngularJS 和 RequireJS - 未捕获错误 : No module: MyApp

    javascript - 在 HIGHCHARTS 中无法设置仪表中的最大点

    javascript - morris.js 单个标签上的多个堆叠条

    java - 我如何从页面中使用 Java 正则表达式 DIV