我正在尝试使用正则表达式将核苷酸序列拆分为氨基酸串。我必须在每次出现字符串“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/