javascript - 使用 JavaScript 在 Power Query 中使用正则表达式

标签 javascript powerbi powerquery

我需要 Regexp,而 M/Power Query 没有对它的原生支持。我围绕同一个优秀的 Web.Page 和 JavaScript 想法找到了几种解决方案变体 - Biccauntant , Hugoberry .

由于 JavaScript 的限制,我不得不采用它们(结果代码如下)。

主要问题是 JavaScript 对字符串变量有它自己的限制——不可能在其中使用“\”。

我的变体解决了这个问题,但我不是 JS 专业人士,所以主要问题是 - 我怀疑“\”问题不是唯一的问题。

所以我的问题是 - 有人在使用 Regexp 时看到 PQ 和 JavaScript“合作”的其他问题吗?关于字符串或其他方面的其他陷阱?

我知道 Regexp 有它自己的转义规则(这不仅是 JavaScript 的需求,而且是 Regexp 本身),所以 Regex 本身的转义不在讨论范围之内。 IE。正则表达式在作为函数参数传递之前应该被正确转义。换句话说,假设如果用户想使用带“\”的正则表达式,他必须改用“\\”,我的函数会将其转换为“\\\\”,它将传递给JavaScript 作为正则表达式。

对于 PQ 用户 - 事实证明,该解决方案的性能至少对于数百行来说相当不错。但不要忘记,无法在 Power BI 服务中使用该功能,这仅适用于 PowerBI Desktop 和 Excel。

代码:

(text as nullable text, pattern as nullable text) as logical =>
    let 
        l = List.Transform({text, pattern}, each Text.Replace(_, "\", "\\")), 
        t = Text.Format("<script>document.write(new RegExp('#{1}').test('#{0}'))</script>", l),
        w = Web.Page(t), 
        d = w[Data]?{0}?[Children]?{0}?[Children]?{1}?[Text]?{0}?, 
        result = text <> null and (pattern = null or (if d <> null then Logical.FromText(d) else error "Regular expression or text are not supported by JavaScript."))
    in
        result

最佳答案

我知道 javascript,但我不知道 Powerbi/Powerquery,所以这个答案可能不完整。

还有其他字符需要在字符串文字中进行转义。

对于单引号字符串文字,\' 需要转义,一些空白字符(如换行符)也是如此。在 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String 处有一个转义列表.其中一些是可选的,但我不确定具体是哪些。我认为您不需要任何带有十六进制数字的数字。我说过 ' 需要转义而不是 ",但是如果您使用的是双引号字符串 ("#{0}" ) 则相反。

除此之外,我无法告诉您 Powerquery 需要进行哪些转义。事实上,令我惊讶的是您的字符串文字 "\\" 按预期工作。

总而言之,它应该看起来像这样(并随时纠正我的 Powerquery 语法错误):

// Define function escapeString which inserts \ before each \ or ' and then applies the escape sequences \n, \r, \v, \t, \b and \f.
let 
    l = List.Transform({text, pattern}, each escapeString(_)), 
...

关于javascript - 使用 JavaScript 在 Power Query 中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547297/

相关文章:

excel - "Lookup"Excel 中 PowerPivot 模型-FactTables 中的数据

Javascript 在新选项卡中输入 key 打开页面

javascript - 使用特定类的链接填充 javascript 数组

javascript - 错误的赋值、逻辑运算符

sql - 可以将.SQL文件加载到Power bi吗?

excel - 给定一列 int64,对每个值进行 REST 调用,将结果返回到单个表

excel - 如何按索引或位置引用Power Query中的列?

javascript - 交互式世界地图,在鼠标悬停时突出显示国家

python - 使用 Python/Django 集成 MS Power BI

powerbi - Power BI - 所有页面上的筛选器均未兑现