我希望正则表达式匹配以$ {,“$ {,'$ {和结束于},}',}”开头的字符串。我的字符串可能是$ {anyhere},“$ {anythinghere}”,“$ {nothinghere}”。我尝试了以下
var str = "${a}";
var patt = /^("|'|${)*(}|'|")$/;
var res = patt.test(str);
alert(res);
但我上面的代码总是返回false。
答案 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