簡體   English   中英

正則表達式在雙引號文本內找到兩個以上花括號

[英]Regex to find more than 2 curly braces inside double quotes text

我正在嘗試查找所有具有超過2個花括號塊的字符串,即雙引號之間的2個動態值,例如{{data1}} {{data2}}

例如:

class="xyz level1 {{disabled}} what is the {{contentStyle}} result" 

我嘗試過但沒有運氣

(。*?{{){1,}

為什么不\\{\\{(\\w+)?\\}\\} 這將與胡子樣式花括號內的文本匹配。

正則表達式

我認為您要測試兩個匹配項-嘗試String.protoype.match並針對長度進行測試

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/match

function x(str) {
    return str.match(/\{\{(\w+)?\}\}/g).length > 1
}

假設您實際上是指兩個或多個花括號,則可以使用以下代碼:

(({){2,})\\S*((}){2,})/g

請注意,如果您實際上想要3個或更多的花括號(超過2個,例如{{{{code}}}),則只需將上面示例中的2s更改為3。

這是通過捕獲第一個組(({){2,}) ,其中({)與大括號匹配,而{2,}捕獲前一組的兩個或多個。 然后,它允許任意數量的( * )非空格字符( \\S )字符,並在遇到((}){2,})時停止匹配,這與我在開頭序列中所描述的相同,只能使用} \\g是全局標志,允許它匹配模式的多個實例,而不僅僅是第一個。

使用此模式(\\{\\{[^}]+\\}\\})(?!(([^"]*"){2})*[^"]*$) 演示

它只會按標題在雙引號內引起來。

這看起來有點毛茸茸,但是您可以使用以下正則表達式進行此操作:

let pattern = /([^{}]*\{\{[^{}]+\}\}[^{}]*){2,}/

一些例子:

pattern.test('') // false
pattern.test('{{a}}{{b}}') // true
pattern.test('{{a}}{{fdsa}fdsa}{{4{{3fdsafds42}}fdsafds') // false

您可以檢查比賽的長度,這將為您提供有關有多少個2個花括號塊的信息:

var p = /(\{\{.+?\}\})/g;
var str = "xyz level1 {{disabled}} what is the {{contentStyle}} result {{what}} is the";
var res = str.match(p); /* here res will either null or an array */
if(res && res.length > 2){
    console.log("yes");
}

一個簡單的解決方案,假設您的牙套始終正確配對:

\w*(?=(\}){2,})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM