javascript - Javascript 所需的正则表达式指南

标签 javascript regex

在以下输入字符串中:

{$foo}foo bar \\{$blah1}oh{$blah2} even more{$blah3} but not{$blarg}{$why_not_me}

我正在尝试匹配 {$SOMETHING_HERE} 的所有实例,这些实例前面没有未转义的反斜杠。

示例:

我希望它匹配 {$SOMETHING} 但不匹配 \{$SOMETHING}

但我确实希望它匹配 \\{$SOMETHING}

尝试:

到目前为止,我所有的尝试都会匹配我想要的,除了像 {$SOMETHING}{$SOMETHING_ELSE} 这样紧挨着的标签。

这是我目前拥有的:

var input = '{$foo}foo bar \\{$blah1}oh{$blah2} even more{$blah3} but not{$blarg}{$why_not_me}';
var results = input.match(/(?:[^\\]|^)\{\$[a-zA-Z_][a-zA-Z0-9_]*\}/g);
console.log(results);

哪些输出:

["{$foo}", "h{$blah2}", "e{$blah3}", "t{$blarg}"]

目标

我希望它是:

["{$foo}", "{$blah2}", "{$blah3}", "{$blarg}", "{$why_not_me}"]

问题

谁能指出我正确的方向?

最佳答案

这里的问题是你需要一个 lookbehind,这是 JavaScript 正则表达式不支持的

基本上你需要“${whatever} 如果它前面有一个双斜杠而不是一个单斜杠”,这就是 lookbehind 所做的。

您可以模仿 lookbehinds 的简单情况,但不确定它是否有助于此示例。试一试:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

编辑 顺便说一句,我不认为你可以用“愚蠢的方式”来做到这一点,因为如果你有 [^\\]\{ 你会匹配大括号前不是反斜杠的任何字符。你真的需要回顾来干净利落地做到这一点。

否则你可以做

(\\*{\$[a-zA-Z_][a-zA-Z0-9_]*\})

然后只计算结果标记中反斜杠的数量。

关于javascript - Javascript 所需的正则表达式指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081013/

相关文章:

java - 拆分字符串如果得到任何大写字母

java - 用于从 NiFi 中的文件中提取文本的正则表达式

javascript - 在没有超时的情况下遍历 JavaScript 中的大型数组时出错

javascript - 我的右轴被切断了……我该如何纠正它?

javascript - 如何在此代码中从 "on click"更改为鼠标悬停时

Python:函数返回的值未在 Pandas 数据框中更新

javascript - RegExp 中的可选字符串

php - 使用正则表达式将单词包装在 SQL 查询字符串中

javascript - 使用 javascript 库向服务器发送额外参数以上传文件

javascript - Moment.js 使用与系统中定义的时区不同的时区