繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM