当前位置: 首页 > 知识库问答 >
问题:

正则表达式全局“i”不识别带有大写字母的单词“he”,而是将其替换为“she”,但确实识别了“he”

熊朝
2023-03-14

如果能给我一些关于我的错误在哪里的指导,我将不胜感激。

此刻,我的代码找到了“he”这个词,并将其替换为“she”;然而,由于某种原因,它忽略了句子开头带有大写字母的“he”,而用“undefined”代替它。我包含了全局标志“I”来忽略区分大小写,但它仍然不起作用。

下面是我的代码:

var mapObj = {
      Childname : name,
      SchoolName : schoolName,
      he : 'she',
      his : 'her',
      him : 'her',
      himself : 'herself',
      she : 'he',
      her : 'his',
      herself : 'himself',
      boy : 'girl'
    };

这里是错误的可能所在。

    for (var n = 0; n<data.length;n++) {
      let pattern = (gender === 'Male') ? new RegExp (/\b(Childname|SchoolName|she|her|herself|girl)\b/,'gi') : new RegExp(/\b(Childname|he|him|his|himself|boy)\b/,'gi')
      let changed = data[n][0].replace(pattern, function(matched){
        return mapObj[matched];
          });
          changedComments.push([changed])
          }
          destinationSheet.getRange(1,1,changedComments.length,changedComments[0].length).setValues(changedComments)

如有任何帮助,我们将不胜感激。

谢谢!

共有2个答案

弘浩博
2023-03-14

matched的值将是与您提供的模式匹配的子字符串,因此,如果您的模式是/he/gi,并且匹配的子字符串是he,那么返回的子字符串match仍然是he,它并不作为matchobj中的键存在。

解决这个问题的简单方法是

let changed = data[n][0].replace(pattern, function(matched){
  return mapObj[matched.toLowerCase()];
});
陶高扬
2023-03-14

它被undefined替换,因为匹配是he而不是he并且您返回的是returnmapobj[matched];-所以returnmapobj['he'];-是未定义的。

返回mapobj[matched.toLowerCase()];可以工作,但替换的文本将以小写she开头。因此,如果第一个字母是大写的,也应该加上一个复选框,比如这里,然后在替换的第一个字母上大写,如果需要的话,就像这里。

 类似资料:
  • 问题内容: 我正在尝试将在字符串中重复两次的大写字母的所有实例替换为小写字母的单个实例。我正在使用以下正则表达式,并且能够匹配重复的大写字母,但是我不确定如何使要替换的字母变为小写。 如何使“ \ 1”小写?我不应该使用正则表达式来执行此操作吗? 问题答案: 传递一个函数作为参数。将传递给此函数,并给出第一个带括号的子组: 编辑 是的,您应该使用而不是为了 _不_匹配,例如。 给出:

  • 我想使用语音重新认知来处理应用程序中的命令。我知道在我的应用程序中的任何给定点,在该点有效的命令是什么,因此希望限制语音重新认知匹配的结果。 我的意思是在我的应用程序中...有效的单词只有数字加字母。我的意思是像之类的数字。 我希望能够将语音识别限制为仅尝试与字母数字单词匹配。。严格限制词汇量将增加其成功的机会。。 如何修改给定的代码以满足我的需求 提前感谢。。

  • 尝试使用正则表达式识别文本数据的结构并遇到障碍。 对于下面的示例文本 Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是业界的标准虚拟文本。 我是一个标签-Lorem Ipsum只是打印的虚拟文本 下面的正则表达式选择I AM A HEADER:和I AM A TAB- 请建议进行编辑,以匹配“我是标题”和“我是标签”,并忽略结尾标记“:”和“-”。

  • 问题内容: 我想知道如何用JavaScript中的大写字母替换捕获组。这是到目前为止我没有尝试过的工作的简化版本: 您能解释一下这段代码有什么问题吗? 问题答案: 您可以将函数传递给。 说明 在此示例中,您将字符串传递给replace函数。因为您使用的是特殊的替换语法 ($ N捕获第N个捕获),所以 您只是赋予了相同的值。实际上,这是骗人的,因为您仅使替换字符串大写 (这是没有意义的,因为和字符没

  • null 匹配:“123”、“ABC123”、“ABC123”、“10.00”、“ABC.123”、“FOO10.00” 不匹配:“糖”、“拉什”、“XYZ” 在下面的示例字符串中,我想要的匹配以粗体-斜体表示:789--789 ABC 123 10.00 ABC 123 123ABC ABC 123ABC ABC 123.ABC

  • 我有这个正则表达式: 搜索: 替换为: 这将把所有单词的第一个字母替换成大写字母。例如: