嵌套括号的正则表达式
regex for nested parenthesis
使用javascript,im试图做一个node.js模块来解析谓词逻辑语句。我已经在这个正则表达式上工作了一段时间,但我只是无法让它按照我想要的方式运行
1. /'(((?:[^{}]*'([^{}]*'))*[^{}]*?)')/
2. .replace(/')((?:[^{}]*')[^{}]*'))*[^{}]*?)'(/,'):::(')
后者在诸如(a&s&d&a&s&d)->(a&s&(d)&s|(d))
之类的事情上工作正常,但我只是切换了分隔符......我想做的是更改这样的语句
((r|a)&(s|r))&(~r)->(r|(q&r))->q
到
1->2->q
我当然可以编写一个过程函数来做到这一点,这将是一个很好的解决方案。但我真的坚持了这一点。
唯一真正的规范是正则表达式需要最尊重最外层的括号,并且能够替换单独的括号。
因为这对正则表达式不友好,所以我把togethor放了几个函数来做你正在寻找的。 第一个将括号与深度匹配:
function match_parens(code_to_test, level, opening, closing){
var sub_match, matched;
return code_to_test.replace(new RegExp('^([^'+opening+closing+']*(.))[''s''S]*$'), function(full_match, matched, $2, offset, original){
if ($2 == opening){
sub_match = match_parens(original.substr(offset+matched.length), level + 1, opening, closing);
matched = matched + sub_match
}
else if (level > 1){
sub_match = match_parens(original.substr(offset+matched.length), level - 1, opening, closing);
matched += sub_match;
}
return matched;
});
}
此函数接受一个字符串并返回直到结束元素的所有内容。
下一个函数帮助将传递给它的字符串拉开,用递增的数字替换括号中的所有内容:
function pull_apart(testString){
var count = 1,
returnString = '',
tempIndex = testString.indexOf('(');
while (tempIndex !== -1){
returnString += testString.substring(0,tempIndex)+count;
count += 1;
testString = testString.substring(testString.indexOf('(') + match_parens(testString.substr(tempIndex + 1), 1, '(', ')').length+1)
tempIndex = testString.indexOf('(');
}
returnString += testString;
return returnString;
}
运行pull_apart('((r|a)&(s|r))&(~r)->(r|(q&r))->q')
返回"1&2->3->q",这就是您要查找的内容。 虽然这并不完全是正则表达式,但它用于上面的参数匹配函数。我不确定这是否适合您想到的任何用例,但希望它有所帮助。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 为什么嵌套括号会导致此正则表达式中的空字符串
- Javascript 正则表达式:交替和嵌套
- 在正则表达式中创建第 n 级嵌套模式的算法
- 正则表达式提取带有嵌套函数(javascript)的函数表示法
- 可以使用什么 Javascript 正则表达式模式来捕获可能嵌套括号中的文本
- 正则表达式:嵌套标签
- 使用正则表达式替换XML属性内错误字符串中的嵌套引号
- 用于匹配有限深度嵌套字符串的正则表达式——缓慢、崩溃的行为
- JS正则表达式匹配大括号内的所有内容(包括嵌套大括号):"{我想要这个{和这个}和这个在一个字符串中}&quo
- Python正则表达式.用另一个嵌套函数匹配js函数体
- 如何在这个基于正则表达式的JSON到XML转换器中处理嵌套数组
- 嵌套括号的正则表达式
- 在正则表达式中嵌套 OR
- 正则表达式中的深度嵌套组
- 如何使用正则表达式获得多个嵌套的打开和关闭标记
- 提取HTML并使用php函数或正则表达式来获得HTML打开和关闭标记,不支持的标记,嵌套标记