我试图用带有动态变量的正则表达式在BigQuety和JS-UDF中使用,但转义有一些问题,我不知道如何解决.

CREATE TEMP FUNCTION `replaceRegex`(org STRING, to_replace STRING, replace_to STRING)
RETURNS STRING LANGUAGE js AS
"""
    re_string = `\\b${to_replace}\\b`
    let re = new RegExp(re_string, 'gi');
    return org.replace(re, replace_to);
""";

SELECT replaceRegex('The quick brown fox jumps over the lazy dog', 'fox', 'bear')

此版本无效.

但我改变了:

re_string = /\\bfox\\b/

然后它确实起作用了.

但是我不能硬编码我的正则表达式,它必须是动态值传递的.

推荐答案

在三重引号字符串的开头添加r可以使代码正常工作,因为它将所有内容都视为原始字符串.请参阅这reference.您的代码应该是:

CREATE TEMP FUNCTION `replaceRegex`(org STRING, to_replace STRING, replace_to STRING)
RETURNS STRING LANGUAGE js AS
r"""
    re_string = `\\b${to_replace}\\b`
    let re = new RegExp(re_string, 'gi');
    return org.replace(re, replace_to);
""";

SELECT replaceRegex('The quick brown fox jumps over the lazy dog', 'fox', 'bear')

测试:

enter image description here

Javascript相关问答推荐

你怎么看啦啦队的回应?

Javascript json定制

这个值总是返回未定义的-Reaction

在浏览器中触发插入事件时检索编码值的能力

Eval vs函数()返回语义

OpenAI转录API错误请求

如何根据查询结果重新排列日期

在SuperBase JS客户端中寻址JSON数据

为什么我看到的是回复,而不是我的文档?

与在编剧中具有动态价值的定位器交互

如何使用puppeteer操作所有选项

通过解构/功能组件接收props-prop验证中缺少错误"

如何在每隔2分钟刷新OKTA令牌后停止页面刷新

表单数据中未定义的数组键

在Puppeteer中使用promise进行日志(log)记录时出现TargetCloseError

使用python,我如何判断一个html复选框是否被隐藏,以及它是否被S选中?

如何为两条动态路由创建一个页面?

如何使用属性访问器定义循环的for...的局部变量

SetTimeout和setInterval时间管理

按下按钮时更改图标