繁体   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