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