HTML5的RNA二级结构正则表达式模式

时间:2013-03-01 08:15:25

标签: regex html5 bioinformatics

我需要一个RegExp来识别HTML5网页中的RNA Second结构。

RNA第二结构只是一个包含点和平衡括号的字符串,它用于识别RNA形状,如果我们知道目标RNA形状,我们可以猜测可以用该目标制造RNA的碱基序列形状。
请注意,它应至少包含一个点.

例如

.....((((...).))..)....
(((....)))
....(((..)))...()...(....((..)))

是真正的RNA第二结构,但

.....((((....)))...
....a.((((......))))......
((((()))))

不是真正的结构

这些都是我未能识别结构的尝试:

<input type="text" pattern="/[.()]/g" />
<input type="text" pattern="/[.()]/g" />
<input type="text" pattern="/[\.\(\)]/g" />
<input type="text" pattern="/[().]/g" />
<input type="text" pattern="/[()\.]/g" />
<input type="text" pattern="/[\.()]/g" />

我是RegExp的新手,我应该在网上发布我的程序,因为老师命令我这样做!
请告诉我我应该使用的RegExp!我的程序(libRNA)本身检查括号的平衡!
libRNA

3 个答案:

答案 0 :(得分:2)

不可能使用JavaScript RegExp的支持级别进行广义括号平衡(有限多个嵌套级别的括号)。 (在Perl,PCRE,.NET正则表达式中,可以进行广义括号平衡)。

您可以编写一个简单的JavaScript函数来检查:

function isValidSequence(str) {
    if (!/\./.test(str)) {
        // Dot . not found
        return false;
    }

    var openBrackets = 0;

    for (var i = 0; i < str.length; i++) {
        if (str[i] === "(") {
            openBrackets++;
        } else if (str[i] === ")") {
            if (openBrackets > 0) {
                openBrackets--;
            } else {
                // Reject the case ..)(..
                return false;
            }
        } else if (str[i] !== ".") {
            // Garbage character, since it is not . or ( or )
            return false;
        }
    }

    // Check all brackets are properly closed
    return openBrackets === 0;
}

答案 1 :(得分:1)

/[().]+/g

将匹配看起来像RNA第二结构的所有内容(即连续的点和圆括号序列)。您应该首先使用此正则表达式来查找可能的匹配项。

然后,您可以使用

检查每个匹配项中是否包含至少一个点
if (submatch.indexof(".") != -1)

但你无法检查括号是否正确平衡 - 因为你需要一个像nhahtdh建议的解析器。

答案 2 :(得分:0)

这里的问题是你真正需要匹配的是:

a = . | .(a) | (a). | .a | a.

使用正则表达式解决这个问题的主要问题很难,如果不是不可能的话,每个开头的副词都必须有一个结束语。

应该可以使用JavaScript执行此操作。你需要做这样的事情:

将paranthesis counter设置为0。迭代整个结构。当找到开头的paranthesis时,增加计数器。如果找到右括号,请减小计数器。

如果在解析结束时计数器回零,则结构正常。现在唯一缺少的是必需的点。为此,我将介绍另一个变量justOpened或类似的东西。当您找到一个开头义务时,您将其设置为true。当您找到一个点时,将其设置为false。如果找到右括号并且变量为true,则可以中止,因为您的结构已损坏。