根据长度将字符串拆分为包含 1-3 个单词的字符串数组

2024-04-26

我有以下输入字符串

Lorem ipsum dolor sat amet consectetur adipiscing elit sed doeiu​​smod tempor incididunt ut Duis aute irure dolor in reprehenderit in esse cillum dolor eu fugia ...

通过示例拆分规则

[
     "Lorem ipsum dolor",  // A: Tree words <6 letters  
     "sit amet",           // B: Two words <6 letters if next word >6 letters
     "consectetur",        // C: One word >=6 letters if next word >=6 letters
     "adipiscing elit",    // D: Two words: first >=6, second <6 letters
     "sed doeiusmod",      // E: Two words: firs<6, second >=6 letters
     "tempor"              // rule C
     "incididunt ut"       // rule D
     "Duis aute irure"     // rule A
     "dolor in"            // rule B
     "reprehenderit in"    // rule D
     "esse cillum"         // rule E
     "dolor eu fugia"      // rule D
     ...
]

正如您所看到的,数组中的字符串可以包含最小一树单词和最大树单词。我尝试按如下方式执行此操作,但不起作用 - 如何执行?

let s="Lorem ipsum dolor sit amet consectetur adipiscing elit sed doeiusmod tempor incididunt ut Duis aute irure dolor in reprehenderit in esse cillum dolor eu fugia";

let a=[""];
s.split(' ').map(w=> {
  let line=a[a.length-1];
  let n= line=="" ? 0 : line.match(/ /g).length // num of words in line
  if(n<3) line+=w+' ';
  n++;
  if(n>=3) a[a.length-1]=line 
}); 

console.log(a);

UPDATE

边界条件:如果最后一个单词/单词不匹配任何规则,则只需将它们添加为最后一个数组元素(但一个字符串中两个长单词不能更新)

总结和有趣的结论

对于这个问题,我们得到了 8 个很好的答案,其中一些讨论了自描述(或自解释)代码。自描述代码是指没有阅读问题的人在第一次查看后能够轻松说出代码到底做了什么。可悲的是,任何一个答案都提供了这样的代码 - 所以这个问题是一个例子,它表明自我描述可能是一个神话


您可以将规则表达为缩写的正则表达式,从中构建真正的正则表达式并将其应用到您的输入:

text = "Lorem ipsum, dolor. sit amet? consectetur,   adipiscing,  elit! sed doeiusmod tempor incididunt ut Duis aute irure dolor in reprehenderit in esse cillum dolor eu fugia bla?";

rules = ['(SSS)', '(SS(?=L))', '(L(?=L))', '(SL)', '(LS)', '(.+)']

regex = new RegExp(
    rules
        .join('|')
        .replace(/S/g, '\\w{1,5}\\W+')
        .replace(/L/g, '\\w{6,}\\W+')
    , 'g')

console.log(text.match(regex))

如果规则不改变,则正则表达式构造部分只需要一次。

请注意,这也以合理的方式处理标点符号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据长度将字符串拆分为包含 1-3 个单词的字符串数组 的相关文章

  • JavaScript RegEx 到 CamelCase 连字符的 CSS 属性

    我正在尝试更改 CSS 属性 如下所示 moz border radius 像这样的 JavaScript CSS 属性 MozBorderRadius 我正在使用这个正则表达式 var exp new RegExp a z gi cons
  • 样式媒体接收器源 (Chromecast)

    目前 我正在开发我的应用程序的 chromecast 集成 目前 您的投射接收器应用程序有 3 个选项 风格媒体接收器 默认媒体接收器 定制媒体接收器 我真的很喜欢媒体接收器的样式 因为以这种方式设计接收器的样式非常容易 然而 有时我真的很
  • 使用 proto.io 让开关在 IE8 中工作

    Proto io 为使用 CSS 的开 关切换按钮提供了一个非常好的解决方案 但是 它在 IE8 中不起作用 http proto io freebies onoff http proto io freebies onoff 有谁知道如何用
  • Socket.IO 消息不更新 Angular 变量

    我有一个 socket io 客户端 服务器设置 并在客户端上运行 AngularJS Server js var io require socket io server io on connection function socket s
  • 淘汰赛“闪烁”问题

    我正在使用 KO 构建 SPA 单页应用程序 该应用程序看起来像一本书 用户可以翻页 问题是 每次加载页面时 都会有一小段时间页面 闪烁 用户会看到页面的无样式版本 我猜这是因为很多样式都依赖于 ko 绑定 所以在 ko 完成它 神奇 之前
  • 调用 DynamoDB 中的用户数据时渲染得太晚

    所以我试图从dynamoDB 我正在使用一个GraphQL API访问我的数据库 在提供的代码的注释部分中 我提到我已经尝试过users 1 friends map 它确实返回正确的朋友列表数组 但用户似乎直到朋友列表渲染后才被设置 我应该
  • 从jquery获取httpreferrer的正确方法

    命令 document referrer 是使用 Jquery 获取引荐来源网址的正确方法吗 怎么样 document referrer
  • 使用 JavaScript 或 jQuery 设置文本框的最大长度

    我想用 JavaScript 或 jQuery 更改文本框的最大长度 我尝试了以下方法 但似乎没有帮助 var a document getElementsByTagName input for var i 0 i
  • JS:按每个类别的最大值过滤对象数组

    什么是最有效 优雅的方式来实现类似sql的过滤效果 我想过滤它们并只获取某个组中最大值的对象 这是我的代码 它可以工作 但可能不是最好的方法 uniqueValues arr gt new Set arr getMaxTimeOf arr
  • 带有占位符文本的文本框,该文本会逐字符消失

    我正在寻找一种方法来构造带有日期字段占位符文本的文本框 占位符文本将为 xx xx xxxx 并在用户键入时逐个字符消失 留下斜杠 我遇到了以下两个问题 它们似乎解决了使文本立即消失的问题 HTML CSS 制作一个文本框 其中的文本显示为
  • Javascript - 如何从 location.href 中删除域

    我需要使用 Javascript 从 location href 中删除域名 我有类似的链接 http localhost App User UserOrder aspx id 949abc91 a644 4a02 aebf 96da3ac
  • 为什么控制台不显示从选择器返回的 jQuery 对象的方法?

    我知道如果我输入 正文 我得到一个 jQuery 对象 然而 在 chrome 的控制台上 我只能看到 jQuery 对象的内部数组 尽管事实上 jQuery 方法是可以访问的 例如 body hide 为什么控制台没有向我显示所有可访问的
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Angular ui-router:链接不可点击

    我尝试运行 angular ui router 来处理我的视图 但我遇到了问题 以下视图的两个链接不可点击 带有链接标签的角度更改变量 但我无法单击 我有这样的观点 h1 App h1
  • 使用 Node.js 将对象写入文件

    我已经在 stackoverflow google 上搜索过这个 但似乎无法弄清楚 我正在抓取给定 URL 页面的社交媒体链接 该函数返回一个包含 URL 列表的对象 当我尝试将此数据写入不同的文件时 它会输出到该文件 object Obj
  • jQuery醉酒:手动触发器和delayIn

    我正在使用 jQuery 的 Tipsy 插件 每当我尝试使用手动触发器和delayIn调用醉酒时 delayIn似乎不起作用 interest tipsy trigger manual gravity n html true delayI
  • 给出 HTML 和 Xpath 时突出显示

    给定 HTML 作为字符串 Xpath 和偏移量 我需要强调这个词 在下面的例子中我需要强调Child 1 HTML 文本 h2 Children h2 Joe has three kids br ul li a href Child 1
  • 启用 Chrome Headless 时 Dusk 测试失败

    我有一个 HTML 元素 该元素应该仅在第一页加载时显示 Javascript 设置 cookie 如果设置了 cookie 则不会显示该元素 PHP 检查 cookie 如果 cookie 存在 则不会呈现内容 我正在尝试为此进行 lar
  • 仅当锚点尚未存在时,正则表达式才用锚点替换网址

    我以前见过类似的问题 但没有一个有效的解决方案 我试图用锚标记替换页面上的所有网址 但仅限那些不在锚标记内的网址 so http google com http google com应替换为 a href http google com h
  • 使用 FormData 发送 XMLHttpRequest

    我正在尝试使用 JavaScript 制作 XHR 但无法使其正常工作 当我在 Chrome 开发者工具的 网络 选项卡中看到正确的请求时 我看到他们有一个 表单数据 部分其中列出了随请求发送的所有信息 如下所示 现在 我尝试让我的XMLH

随机推荐

  • SQLAlchemy Join 从多个表中检索数据

    我正在尝试从多个表中检索数据SQL炼金术使用 join 方法 当我运行查询时 我希望得到一个对象 该对象包含来自不同表的所有数据 以便我可以使用a 区域名称等等在哪里区域名称位于其中一张连接的表上 下面是我正在运行的查询和表布局 如果有人能
  • 使用反射实例化泛型类[重复]

    这个问题在这里已经有答案了 NOTE I don t believe this question is a duplicate of the one linked above as I explain in the UPDATE below
  • Mono WebClient 编码问题

    我正在尝试移植 NET应用程序从 Windows 到 Mono 但某些在 Windows 上运行的代码不再运行 正如预期的那样 on mono WebClient client new WebClient Console WriteLine
  • 用于网站的 Git / 接收后 / 测试站点和生产站点的分离

    我使用 Git 来管理网站的源代码和部署 目前测试站点和实时站点在同一个机器上运行 关注此资源http toroid org ams git website howto http toroid org ams git website how
  • 我们绝对需要 STS 来实现 SAML 吗?

    我第一次尝试实现支持 SAML 的 SOAP 服务 并且对 SAML 实现中安全令牌服务 STS 的作用有一些概念性问题 用户 gt Web 应用程序 SOAP SAML gt 消息传递应用程序 基本上 该场景是用户使用其用户名和密码登录到
  • 如何获取内存中缓冲区的文件描述符?

    如果我有一个包含文件数据的缓冲区 如何从中获取文件描述符 这是一个源自于的问题如何解压内存中的文件 https stackoverflow com questions 1553653 how to untar file in memory
  • jquery val() 不工作

    jQuery val 不起作用 这是简单的脚本 com form submit function var name nama val var komentar komentar val alert Hi name this is your
  • 如何将data.table按多列连续分组

    我想获取一堆由数百个分组变量分组的描述性统计数据 我知道从如何按多列对data table进行分组 https stackoverflow com questions 12478943 how to group data table by
  • 更新进度动画 gif 在回发时停止

    我使用了 ajax 更新进度控件 在回发发生时显示动画 gif 问题 它显示一段时间 但随后停止刷新 或者更确切地说 停止播放 循环 造成同样情况的实际原因是什么 请指教 谢谢 使用 Internet Explorer 时 gif 的动画将
  • 我想要表格格式的选择查询结果,例如摘要报告

    例如 month1 month2 month3 total district1 5 2 9 16 district2 1 0 11 12 total 260 150 140 550 这里最终的总数并不重要 但至少我需要显示每个地区每月的数量
  • 以非 root 用户身份在 UserData 中运行命令

    我正在尝试使用 EC2 UserData 脚本安装气流 我需要使用非 root 用户 ec2 user 运行一些命令 请参阅下面的脚本 UserData Fn Base64 Sub bin bash set xe Install GCC y
  • JavaFX 8:拦截应用程序“退出”

    为了验证用户所做的所有更改是否已保存 我想拦截 JavaFX 应用程序的退出 退出 是否有一种通用的方法来实现这一目标 例如覆盖事件 或者还有更多方法吗 正如他们已经说过的 这是通过拦截来完成的WindowEvent WINDOW CLOS
  • 在 Android 编辑文本字段中显示一条消息

    海 我有一个带有一个文本字段的 Android 程序 当它加载到模拟器上时 我需要在该文本字段内显示一条消息 当用户在该文本框中单击时 该消息应该消失 例如 请输入姓名 任何人都可以在这里发布一些示例代码吗 只需使用或致电setHint在物
  • 设备中的嵌套资源

    我是 Rails 新手 我想要一些关于我的路线和正确的路由逻辑的建议 我正在开发一个非常简单的应用程序 用户可以在其中发布列表 用户 设计模型 有很多列表 并且该列表属于一个用户 我的列表中有一个 user id integer 当用户成功
  • Elasticsearch 崩溃后无法恢复

    磁盘空间不足 导致 Elasticsearch 分片崩溃 三个节点现在为红色 两个节点已恢复 它们的状态为黄色 ES 的 CPU 利用率为 150 内存利用率很高 正在尝试恢复它们 但似乎存在一些版本匹配冲突 我清理了磁盘空间并删除了分片的
  • 如何在doctrine2查询生成器where语句中添加运算符

    我试图从一个表中进行选择 其中所选持续时间除以条目持续时间等于没有余数 qb em gt createQueryBuilder gt from AcmeBlogBundle Entry e gt andWhere duration e du
  • Android 和 PhoneGap——在 NPObject 上调用方法时出错

    我正在尝试设置FLAG SHOW WHEN LOCKED在我的phonegap应用程序中 但仅当显示特定页面时 为此 我有一个 Java 插件 扩展自CordovaPlugin在以下代码中execute method if action e
  • MySQL Workbench 连接编码

    在测试一些代码时 我偶然发现了以下 MySQL 错误 Error Code 1267 Illegal mix of collations utf8 general ci IMPLICIT and utf8mb4 general ci COE
  • PHP GD库调整照片大小

    我正在尝试使用 PHP 的 GD 库创建照片的缩略图 以下是我正在采取的步骤 创建GD图像 资源 获取图像的高度和宽度 创建一个空白的 gd 图像资源 高度为 100 像素 宽度适当 将资源图像复制到空白 gd 图像资源并保存这两个图像 这
  • 根据长度将字符串拆分为包含 1-3 个单词的字符串数组

    我有以下输入字符串 Lorem ipsum dolor sat amet consectetur adipiscing elit sed doeiu smod tempor incididunt ut Duis aute irure dol