簡體   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