JavaScript中与$ {}匹配的正则表达式

时间:2016-07-18 04:26:39

标签: javascript regex

我希望正则表达式匹配以$ {,“$ {,'$ {和结束于},}',}”开头的字符串。我的字符串可能是$ {anyhere},“$ {anythinghere}”,“$ {nothinghere}”。我尝试了以下

var str = "${a}";
var patt = /^("|'|${)*(}|'|")$/;
var res = patt.test(str);
alert(res);

但我上面的代码总是返回false。

4 个答案:

答案 0 :(得分:3)

你必须用反斜杠转义内部$,因为它是一个特殊字符。但仅凭这一点无法解决问题。如上所述,patt匹配以"'${开头的任何字符串,0次或更多次,并以}或{{结尾1}}或'。你想要的正则表达式是这样的:

"

以下是var str = "${a}"; var patt = /^(['"]?)\${.*}\1$/; var res = patt.test(str); alert(res); 的每个部分正在做的事情:

  • patt:字符串必须以0或1单引号开头,或者以0或1双引号开头。这是在括号中,以便我们可以在regexp
  • 的末尾引用它
  • ^(['"]?):接下来必须是一个美元符号,然后是一个开放的大括号
  • \${:接下来必须是0或更多任何字符(换行符除外)
  • .*:接下来必须是一个封闭的大括号
  • }:最后,字符串必须以字符串开头匹配的任何模式结束。 \1$是第一个捕获组(在括号中)的“反向引用”,因此如果字符串以单引号开头,则只有在它以单引号结尾时才会匹配。双引号也是如此,而且根本没有引号

答案 1 :(得分:0)

$在正则表达式中具有特殊含义,因此必须使用反斜杠\对其进行转义。如果您想要一个或多个通配符,则表示.+,而不是*。以下代码将与测试模式匹配:

/^'?"?\${.+}'?"?$/

答案 2 :(得分:0)

这有效:

var patt = /^\"\$\{((?!\").)+\}\"$|^\'\$\{((?!\').)+\}\'$|^\$\{((?!\}).)+\}$/;

请注意,分配给str的值已更改为“$ {a} \”,以反映您所声明的目标。你必须逃避(在前面放一个反斜杠)任何你想要字面读的字符,而不是元字符。为了让你的任何一个目标同时匹配,只需重复模式三次,通过管道像往常一样分开,替换“与\”或根本没有(在这种情况下,你应该改变\ “在最里面的括号内}}。这些变化如下所示:

<staticContent>
  <mimeMap fileExtension=".fbx" mimeType="application/octet-stream" />
</staticContent>

答案 3 :(得分:0)

global-scope