Javascript 具有已知开始和结束索引的两个字符位置之间的正则表达式
一般来说,在Javascript 具有已知开始和结束索引的两个字符位置之间的正则表达式,javascript,regex,sed,Javascript,Regex,Sed,一般来说,在regex中,是否有方法在两行位置之间选择数据?读了几天regex,我甚至不确定正确的术语(字符/行位置、索引、列?),但我的意思是 选择两个索引之间的数据,即^.{4}和^.{7}之间的数据,例如: TESTINGREGEX ISNTTHEBEST! 或 我期待的结果是: TESTREGEX ISNTBEST! 及 我想知道,如果可能的话,我可以学习如何实现它?我非常熟悉使用其他工具实现这一点的其他方法,但我很好奇如何使用regex实现这一点 我曾尝试与非捕获组合作,想知道我是
regex
中,是否有方法在两行位置之间选择数据?读了几天regex
,我甚至不确定正确的术语(字符/行位置、索引、列?),但我的意思是
选择两个索引之间的数据,即^.{4}
和^.{7}
之间的数据,例如:
TESTINGREGEX
ISNTTHEBEST!
或
我期待的结果是:
TESTREGEX
ISNTBEST!
及
我想知道,如果可能的话,我可以学习如何实现它?我非常熟悉使用其他工具实现这一点的其他方法,但我很好奇如何使用regex
实现这一点
我曾尝试与非捕获组合作,想知道我是否受到限制,因为我正试图在atom
编辑器的查找和替换regex
功能中应用此正则表达式(成为:),所以我希望得到一些建议,以拓宽我的知识面并尝试一下。我猜javascript
,和/或sed
styleregex
答案是可以接受的……真的,任何东西都会有帮助
编辑:
{3}(?=.{5}$)
来自works for me,以及我在OP中给出的示例文本。知道什么时候可以从$
行末开始计数是件好事。但我意识到我其实需要相反的东西。。。我需要从行的开头数出来。这是不可能的,;re:关于不支持lookbehind的评论?regex^(.{4})。{3}(.{5})$
(用JavaScript方言表示,但其中使用的功能非常常见)将为您提供两个捕获组,您可以组合以获得所描述的输出:
功能测试(str){
var match=str.match(/^(.{4})。{3}(.{5})$/;
log(str,'=>',匹配[1]+匹配[2]);
}
测试(“测试正则表达式”);
测试(“不是最好的!”代码>仅使用正则表达式是可能的,但不使用javascript。正则表达式(?如果目的是获取两个字符偏移量之间的文本,那么正则表达式就太过分了。只需使用切片:
函数排除(str,i,j){
返回str.slice(0,i)+str.slice(j);
}
日志(排除(“TESTINGREGEX”,4,7));
console.log(exclude(“isnthebest!”,4,7));
但这是不灵活的,如果字符串长度不是12个字符,则会抛出错误(“TEST”
将抛出错误,因为没有匹配项,因此匹配[2]
将访问未定义项的第二项)!@ibrahimmahrir:请看末尾关于长字符串的注释。当然,短字符串在这个问题上没有意义。{3}(?=.{5}$)
对我有效!我实际上已经尝试过了(?@trytryreach是的,这是因为尽管look behinds是regex语法的正式组成部分,但出于性能原因,javascript不支持它们(我猜想)。@swaver2112这是否意味着与{3}(?=.{12}$)相反
行不通?我意识到,从$
行尾开始,计数可能会发生变化,我需要从行尾的左侧开始计数,并从设置的起始点开始从第n个字符开始进行匹配。只需说明javascript没有“lookback”,无论是正的还是负的。只有lookaheads(pos或neg)@MarcGuiselin我更新了OP,意识到我给出的示例有一个统一的线端位置,而我的实际用例不是这样。想知道是否可以实现相反的结果?
TESTREGEX
ISNTBEST!
TESTREGEXCANBEFUN
ISNTBEST!ANDFARFROMFUN