gpt4 book ai didi

javascript - 如何使用正则表达式与关键字数组进行替换?

转载 作者:行者123 更新时间:2023-11-28 16:47:04 26 4
gpt4 key购买 nike

我正在尝试创建一个循环,将某些单词替换为其大写版本。然而,我似乎无法让它与捕获组一起使用,因为我只需要由空格或起始行标记包围的大写单词。如果我理解正确的话 \b 是边界匹配器?为了方便起见,下面的列表已被缩短。

raw_text = 'crEate Alter Something banana'
var lower_text = raw_text.toLowerCase();
var sql_keywords = ['ALTER', 'ANY', 'CREATE']
for (i = 0; i < sql_keywords.length; i++){
search_key = '(\b)' + sql_keywords[i].toLowerCase() + '(\b)';
replace_key = sql_keywords[i].toUpperCase();
lower_text = lower_text.replace(search_key, '$1' + replace_key + '$2');
}

循环正常,但替换失败。我认为我的格式不正确,但我不知道如何正确格式化它。需要明确的是,它正在搜索由行开头或空格包围的单词,然后用大写版本替换该单词,同时保留边界。

最佳答案

几个问题:

  • 字符串文字中的反斜杠是转义字符,因此如果您打算使用文字反斜杠(用于生成正则表达式语法),则需要将其加倍
  • 您没有创建正则表达式。通过调用 RegExp
  • 创建动态正则表达式
  • 您可能希望提供正则表达式选项标志,包括用于全局的 g,并且您还可以通过添加 i(不区分大小写)标志来简化操作。<
  • 没有理由创建 \b 的捕获组,因为它不代表输入中的字符。因此,即使您的代码可以正常工作,$1$2 也只会解析为空字符串 - 它们没有任何作用。
  • 您将输入全部转换为小写,因此不匹配的单词的大小写将会丢失。

同时为所有对象创建一个正则表达式并使用 replace 的回调参数会更容易:

var raw_text = 'crEate Alter Something banana';
var sql_keywords = ['ALTER','ANY','CREATE'];
var regex = RegExp("\\b(" + sql_keywords.join("|") + ")\\b", "gi");
var result = raw_text.replace(regex, word => word.toUpperCase());

console.log(result);

顺便说一句,您可能还想匹配后面跟着标点符号(例如逗号)的保留字。 \b 将匹配字母数字和非字母数字之间的任何切换,反之亦然,所以看起来不错。

关于javascript - 如何使用正则表达式与关键字数组进行替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com