【问题标题】:javascript regexp split including delimiterjavascript 正则表达式拆分,包括分隔符
【发布时间】:2012-11-14 20:16:20
【问题描述】:

我想把'9088{2}12{1}729'拆分成[ "9088", "{2}12", "{1}729" ]

或者对我更有用:[ "9088", "2-12", "1-729" ]

试过了:

'9088{2}12{1}729'.split(/\{[0-9]+\}/); => ["9088", "12", "729"]

也试过了:

'9088{2}12{1}729'.match(/\{[0-9]+\}/); => ["{2}"]

我知道它可能涉及到一些其他的正则表达式字符串来拆分,包括分隔符。


在php中试过了,我想你也可以一行完成。

preg_split( '/{/', preg_replace( '/}/', '-', "9088{2}12{1}729" ) )

Array ( [0] => 9088 [1] => 2-12 [2] => 1-729 )

只需用 split 包装替换函数即可获得正确的偏好顺序。

我觉得我更喜欢 js :)

【问题讨论】:

标签: javascript regex lookahead


【解决方案1】:

对我更有用:[ "9088", "2-12", "1-729" ]

使用简单的技巧就可以做到!

"9088{2}12{1}729".replace(/\}/g,'-').split(/\{/g)

// ["9088", "2-12", "1-729"]

【讨论】:

  • 你的桌边有没有一瓶真棒 :) 谢谢。
【解决方案2】:

您可以使用简单的零宽度positive lookahead/(?={)/

'9088{2}12{1}729'.split(/(?=\{)/);  // => ["9088","{2}12","{1}729"]

“零宽度”部分意味着实际匹配的文本是空字符串,因此拆分不会丢弃任何内容,而前瞻意味着它在包含的模式之前匹配,因此/(?=\{)/ 匹配字符之间的空字符串,其中用箭头表示:

9 0 8 8 { 2 } 1 2 { 1 } 7 2 9
       ↑         ↑

然后您可以使用Array.prototype.map{1}2 表单转换为1-2 表单。

'9088{2}12{1}729'.split(/(?=\{)/)
    .map(function (x) { return x.replace('{', '').replace('}', '-'); });

产量

["9088","2-12","1-729"]

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2020-10-26
    • 2012-08-13
    相关资源
    最近更新 更多