javascript - 使用正则表达式在 JS 中拆分核苷酸序列

标签 javascript regex

我正在尝试使用正则表达式将核苷酸序列拆分为氨基酸串。我必须在每次出现字符串“ATG”时开始一个新字符串,但我不想真正在“ATG”处停止第一个匹配项。有效输入是 As、Cs、Gs 和 Ts 的任意顺序。

例如,给定输入字符串:ATGAACATAGGACATGAGGAGTCA 我应该得到两个字符串:ATGAACATAGGACATGAGGAGTCA(整个字符串)和 ATGAGGAGTCA(“ATG”之后的第一场比赛)。包含 n 次“ATG”的字符串应产生 n 个结果。

我认为表达式/(?:[ACGT]*)(ATG)[ACGT]*/g 会起作用,但它不起作用。如果这不能用正则表达式来完成,那么只写出代码就足够容易了,但我总是更喜欢一个优雅的解决方案(如果有的话)。

最佳答案

如果你真的想使用正则表达式,试试这个:

var str = "ATGAACATAGGACATGAGGAGTCA",
    re = /ATG.*/g, match, matches=[];
while ((match = re.exec(str)) !== null) {
    matches.push(match);
    re.lastIndex = match.index + 3;
}

但是要小心 exec 和改变索引。您可以轻松地使其成为无限循环。

否则,您可以使用 indexOf 查找索引并使用 substr 获取子字符串:

var str = "ATGAACATAGGACATGAGGAGTCA",
    offset=0, match=str, matches=[];
while ((offset = match.indexOf("ATG", offset)) > -1) {
    match = match.substr(offset);
    matches.push(match);
    offset += 3;
}

关于javascript - 使用正则表达式在 JS 中拆分核苷酸序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048597/

相关文章:

javascript - 在 HTA 中单击时使按钮变色?

javascript - 如何获得 JavaScript v8 控制台以供离线使用?

javascript - 如何通过用 getElementsByClass 替换 bygetElementById 来使 JavaScript 工作

javascript - 是否可以将 domparser 元素更改为字符串?

php - 正则表达式 - preg_match 拉丁和希腊字符

php - php 中的 preg_match

javascript - 使用 HTML DOM 查找元素总是返回错误?

php - 查找具有未知数字的数字之间的最小可能差异

regex - 使 checkstyle 需要变量前缀

Python正则表达式字符串匹配?