微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在javascript中通过正则表达式分割线?

我有这种文字结构:
1.6.1 Members................................................................ 12
1.6.2 Accessibility.......................................................... 13
1.6.3 Type parameters........................................................ 13
1.6.4 The T generic type aka <T>............................................. 13

我需要创建JS对象:

{ 
  num:"1.6.1",txt:"Members"
},{ 
  num:"1.6.2",txt:"Accessibility"
} ...

那不是问题.

问题是我想通过正向前瞻分割通过正则表达式分割来提取值

Split via the first time you see that next character is a letter

我试过了什么:

'1.6.1 Members........... 12'.split(/\s(?=(?:[\w\. ])+$)/i)

这很好用:

["1.6.1","Members...........","12"] // I don't care about the 12.

但如果我有2个字或更多:

'1.6.3 Type parameters................ 13'.split(/\s(?=(?:[\w\. ])+$)/i)

结果是:

[“1.6.3”,“类型”,“参数…………….”,“13”] //我再也不在乎13.

我当然可以加入他们,但我希望这些话能够在一起.

题 :

如何增强我的正则表达式而不是分裂单词?

期望的结果:

[“1.6.3”,“类型参数”]

要么

[“1.6.3”,“类型参数……..”] //我稍后会删除附加内容

要么

[“1.6.3”,“类型参数…….. 13”] //我稍后会删除附加内容

NB

我知道我可以通过“”或其他更简单的解决方案进行拆分,但我正在寻求(纯粹的知识)对我的解决方案进行增强,使用正向前瞻分割.

Full online example :

nb2:

文本中间也可以包含大写字母.

解决方法

你可以使用这个正则表达式:
/^(\d+(?:\.\d+)*) (\w+(?: \w+)*)/gm

并使用匹配的组#1和匹配的组#2获得所需的匹配.

Online Regex Demo

更新:对于String#split,您可以使用此正则表达式:

/ +(?=[A-Z\d])/g

Regex Demo

更新2:在章节名称中也可能有大写字母,需要更复杂的正则表达式:

var re = /(\D +(?=[a-z]))| +(?=[a-z\d])/gmi; 
var str = '1.6.3 Type Foo Bar........................................................ 13';
var m = str.split( re );
console.log(m[0],',m.slice(1,-1).join(''),m.pop() );

//=> 1.6.3,Type Foo Bar........................................................,13

原文地址:https://www.jb51.cc/js/157414.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐