【问题标题】:How to split a string while retaining the boundary characters?如何在保留边界字符的同时拆分字符串?
【发布时间】:2020-01-14 19:39:49
【问题描述】:

我正在尝试在 Javascript 中拆分一个字符串(带有半 json 对象)以在 }, { 上拆分,同时我想保留花括号,为此我想使用 zerowidth 回溯和 zerowidth 前瞻作为described here

"{}, {a}, {c:d}".split(/(?<=}), ?(?={)/)

在 chrome 中,这可以按预期工作,并在开始和结束时很好地生成带有花括号的三个字符串元素的数组,但是在 Safari 和 Firefox 中,这会失败,因为未实现后向正则表达式是否有保留花括号的好方法与分裂?我试过了:

"{}, {a}, {c:d}".split(/(}), ?({)/)

但这会拆分每个字符。

【问题讨论】:

  • 试试:"{}, {a}, {c:d}".split(/, *(?={)/)
  • @anubhava 您的模式将匹配, {a}, {c:d},尽管 OP 的正则表达式不匹配。 see here
  • 有什么理由不能只用逗号分割吗?
  • @MonkeyZeus 实际上是一个好问题。有些元素确实有逗号的 `{a:2, e:'f'}

标签: javascript regex split lookbehind


【解决方案1】:

您可以使用string.split(/}, ?(?={)/)(其中(?&lt;=}) 正向lookbehind 转换为消耗}),然后将} 附加到结果数组中除最后一项之外的每一项。

var string = "{}, {a}, {c:d}";
var items = string.split(/}, ?(?={)/);
var result = items.map(function(x,id,arr) {
  return x + (id != arr.length - 1 ? "}" : ""); 
});
console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多