在以下输入字符串中:
{$foo}foo bar \\{$blah1}oh{$blah2} even more{$blah3} but not{$blarg}{$why_not_me}
Run Code Online (Sandbox Code Playgroud)
我试图匹配所有{$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);
Run Code Online (Sandbox Code Playgroud)
哪个输出:
["{$foo}", "h{$blah2}", "e{$blah3}", "t{$blarg}"]
Run Code Online (Sandbox Code Playgroud)
目标
我希望它是:
["{$foo}", "{$blah2}", "{$blah3}", "{$blarg}", "{$why_not_me}"]
Run Code Online (Sandbox Code Playgroud)
题
任何人都能指出我正确的方向吗?
这里的问题是你需要回顾,而 JavaScript 正则表达式不支持
基本上你需要“${whatever},如果它前面有双斜杠而不是单斜杠”,这就是lookbehind所做的。
您可以模仿简单的后视情况,但不确定它在此示例中是否有帮助。试一试:http ://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
编辑
顺便说一句,我不认为你可以用“愚蠢的方式”来做到这一点,因为如果你有的话,[^\\]\{你将匹配大括号之前不是反斜杠的任何字符。您确实需要后视才能干净地完成此操作。
否则你可以做
(\\*{\$[a-zA-Z_][a-zA-Z0-9_]*\})
Run Code Online (Sandbox Code Playgroud)
然后计算结果标记中反斜杠的数量。
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |