【问题标题】:Can not split text via regex无法通过正则表达式拆分文本
【发布时间】:2017-03-22 16:56:51
【问题描述】:

我只是想分割克隆标记(来自 gulp 的横幅)。无论如何,这是简单的文本女巫需要从任何克隆中清除。我应该删除一个克隆,所以首先我必须拆分文本。

似乎正则表达式值工作良好:https://regex101.com/r/6D456D/1,但 JavaScript 不会拆分我的文本 =(

请告诉我我的错误在哪里?

var regexp = /^\/\*!BANNERSTART[\s\S]*?BANNEREND\*\/(?:\\n){2}/gmi;
var txt = "/*!BANNERSTART\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\n| Информация о дистрибутиве : Freshbroccoli\t\t\t\t\t\t\t\t\t\n|==============================================================================\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Версия:         0.0.1\t\t\t\t\t\t\t\t\t\t\t\n| Лицензия:       ISC\t\t\t\t\t\t\t\t\t\t\t\n| Описание:       Свежий, переосмысленный сайт Freshbroccoli\t\t\t\t\t\t\t\t\t\t\n| Компания:       ООО БРОККОЛИ\t\t\t\t\t\t\t\t\t\n| Локация:        Россия, Москва, 2-я Звенигородская 13/43\t\t\t\t\t\t\t\t\t\n| Email:          info@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\n| Телефон:        +7(495)108-07-98\t\t\t\t\t\t\t\t\t\t\n| Файл изменен:   Wed Mar 22 2017 18:39:44 GMT+0300 (MSK)\t\t\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|------------------------------------------------------------------------------\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Автор:    Андрей Дьяченко (Front-end разработчик)\t\t\t\t\t\t\t\t\t\t\t\t\n| Локация:  Россия, Москва\t\t\t\t\t\t\t\t\t\t\t\n| Email:    a.dyachenko@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\t\n| Skype:    tux_will\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\nBANNEREND*/\n\n/*!BANNERSTART\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\n| Информация о дистрибутиве : Freshbroccoli\t\t\t\t\t\t\t\t\t\n|==============================================================================\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Версия:         0.0.1\t\t\t\t\t\t\t\t\t\t\t\n| Лицензия:       ISC\t\t\t\t\t\t\t\t\t\t\t\n| Описание:       Свежий, переосмысленный сайт Freshbroccoli\t\t\t\t\t\t\t\t\t\t\n| Компания:       ООО БРОККОЛИ\t\t\t\t\t\t\t\t\t\n| Локация:        Россия, Москва, 2-я Звенигородская 13/43\t\t\t\t\t\t\t\t\t\n| Email:          info@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\n| Телефон:        +7(495)108-07-98\t\t\t\t\t\t\t\t\t\t\n| Файл изменен:   Wed Mar 22 2017 18:39:34 GMT+0300 (MSK)\t\t\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|------------------------------------------------------------------------------\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Автор:    Андрей Дьяченко (Front-end разработчик)\t\t\t\t\t\t\t\t\t\t\t\t\n| Локация:  Россия, Москва\t\t\t\t\t\t\t\t\t\t\t\n| Email:    a.dyachenko@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\t\n| Skype:    tux_will\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\nBANNEREND*/\n";

var array = txt.split(regexp);
console.log(array.length); // => Waiting for arr.length will be 2, not 1 =(

【问题讨论】:

  • 查看这个以前的堆栈答案,它可能会有所帮助。 stackoverflow.com/questions/3559883/…
  • 嗯,我开始想,也许这个符号 | 会破坏整个假期?
  • 如果您怀疑它,您可以逃脱它来查看。或者在没有它的情况下对字符串进行快速测试,看看它是否正确处理。 :-)
  • 好主意,试过了,没拆=(

标签: javascript


【解决方案1】:

split 方法识别的部分没有进入数组,您需要更新您的正则表达式或使用其他方法;

var str = 'hello ;world ;'
var re = /\s*;\s*/;
var nameList = names.split(re);

将创建 ['hello', 'world'] 而不是 ['hello ;','world ;'];

你需要的是 String.match() 方法。

var nameList = names.match(re);

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/match

【讨论】:

【解决方案2】:

我找到了一个同时使用正负正则表达式的解决方案,没有贪婪搜索https://regex101.com/r/6D456D/5

var regexp = /(?=\/\*!BANNERSTART)(?!BANNEREND\*\/(?:\\n){0,2})[\s\S]*?/gmi;
var txt = "/*!BANNERSTART\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\n| Информация о дистрибутиве : Freshbroccoli\t\t\t\t\t\t\t\t\t\n|==============================================================================\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Версия:         0.0.1\t\t\t\t\t\t\t\t\t\t\t\n| Лицензия:       ISC\t\t\t\t\t\t\t\t\t\t\t\n| Описание:       Свежий, переосмысленный сайт Freshbroccoli\t\t\t\t\t\t\t\t\t\t\n| Компания:       ООО БРОККОЛИ\t\t\t\t\t\t\t\t\t\n| Локация:        Россия, Москва, 2-я Звенигородская 13/43\t\t\t\t\t\t\t\t\t\n| Email:          info@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\n| Телефон:        +7(495)108-07-98\t\t\t\t\t\t\t\t\t\t\n| Файл изменен:   Wed Mar 22 2017 18:39:44 GMT+0300 (MSK)\t\t\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|------------------------------------------------------------------------------\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Автор:    Андрей Дьяченко (Front-end разработчик)\t\t\t\t\t\t\t\t\t\t\t\t\n| Локация:  Россия, Москва\t\t\t\t\t\t\t\t\t\t\t\n| Email:    a.dyachenko@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\t\n| Skype:    tux_will\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\nBANNEREND*/\n\n/*!BANNERSTART\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\n| Информация о дистрибутиве : Freshbroccoli\t\t\t\t\t\t\t\t\t\n|==============================================================================\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Версия:         0.0.1\t\t\t\t\t\t\t\t\t\t\t\n| Лицензия:       ISC\t\t\t\t\t\t\t\t\t\t\t\n| Описание:       Свежий, переосмысленный сайт Freshbroccoli\t\t\t\t\t\t\t\t\t\t\n| Компания:       ООО БРОККОЛИ\t\t\t\t\t\t\t\t\t\n| Локация:        Россия, Москва, 2-я Звенигородская 13/43\t\t\t\t\t\t\t\t\t\n| Email:          info@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\n| Телефон:        +7(495)108-07-98\t\t\t\t\t\t\t\t\t\t\n| Файл изменен:   Wed Mar 22 2017 18:39:34 GMT+0300 (MSK)\t\t\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|------------------------------------------------------------------------------\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n| Автор:    Андрей Дьяченко (Front-end разработчик)\t\t\t\t\t\t\t\t\t\t\t\t\n| Локация:  Россия, Москва\t\t\t\t\t\t\t\t\t\t\t\n| Email:    a.dyachenko@freshbroccoli.ru\t\t\t\t\t\t\t\t\t\t\t\n| Skype:    tux_will\t\t\t\t\t\t\t\t\t\t\t\n|\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n|==============================================================================\nBANNEREND*/\n";

var array = txt.split(regexp);
console.log(array.length); // => Waiting for arr.length will be 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多