[英]Regular expression in JavaScript that matches ${}
我希望正则表达式匹配以$ {,“ $ {,'$ {并以},}',}”结尾的字符串。 我的字符串可能是$ {anythinghere},“ $ {anythinghere}”,“ $ {anythinghere}”。 我尝试了以下
var str = "${a}";
var patt = /^("|'|${)*(}|'|")$/;
var res = patt.test(str);
alert(res);
但是我上面的代码总是返回false。
您必须用反斜杠转义内部的$
,因为它是一个特殊字符。 但这本身并不能解决问题。 如上所述, patt
匹配以"
或'
或${
开头,0次或更多次,以}
或'
或"
结尾的任何字符串。 您想要的正则表达式将如下所示:
var str = "${a}";
var patt = /^(['"]?)\${.*}\1$/;
var res = patt.test(str);
alert(res);
这是patt
每个部分正在做的事情:
^(['"]?)
:字符串必须以0或1单引号或0或1双引号开头。在括号中,以便我们可以在正则表达式的末尾引用它 \\${
:下一个必须是一个美元符号,后跟一个大括号 .*
:下一个必须为0或更大的任何字符(换行符除外) }
:下一个必须是一个封闭的花括号 \\1$
:最后,字符串必须以在字符串开头匹配的任何模式结尾。 \\1
是第一个捕获组的“反向引用”(在括号中),因此,如果字符串以单引号开头,则仅当字符串也以单引号结尾时才匹配。 双引号也一样,根本没有引号 $
在正则表达式中有特殊含义,因此必须使用反斜杠\\
对其进行转义。 如果要使用1个或多个通配符,则以.+
而不是*
。 以下代码将与测试模式匹配:
/^'?"?\${.+}'?"?$/
这有效:
var str = "\"${a}\"";
var patt = /^\"\$\{((?!\").)+\}\"$/;
var res = patt.test(str);
alert(res);
请注意,分配给str的值已更改为\\“ $ {a} \\”,以反映您指定的目标。 您必须转义(希望在前面加上反斜杠)希望逐字读取而不是作为元字符的任何字符。 为了一次与您的任何一个目标匹配,只需重复3次patt模式,并照常用管道隔开,用\\代替\\“或根本不替换(在这种情况下,您应该更改\\ “}内的最括号内。 这些更改如下所示:
var patt = /^\"\$\{((?!\").)+\}\"$|^\'\$\{((?!\').)+\}\'$|^\$\{((?!\}).)+\}$/;
You can use
var a=new RegExp("\^(\'\\$\{)[a-z]+(\}\')|(\"\\$\{)[a-z]+(\}\")|(\\$\{)[a-z]+(\})\$");
a.test("${vijay}")//true
a.test("\'${vijay}\'")//true
a.test("\"${vijay}\"")//true
a.test("\'${vijay}\"")//false
If you use only \$ it takes as end og expresion.So use\\$ means $ as a special character
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.