正则表达式拆分期间出现javascript未定义元素

标签 javascript regex

下面的代码在中间产生了未定义的元素

"Hello World\n\nhello world".split(/\n(\n|\t|\s)*?\n/)
"Hello World\n\nhello world".split(/\n(\n|\t|\s)*\n/)

输出是

["Hello World", undefined, "hello world"]

如果有两个换行符,它们之间有任意数量的换行符、空格或制表符,只要它们不是字母、符号或数字,我想拆分。

最佳答案

这是因为当您在拆分模式中使用捕获组时,javascript 在结果中包含捕获组的内容。因为,捕获组不能为空,它永远不会重复,这就是为什么你得到“未定义”而不是空字符串。

为防止这种情况,请使用非捕获组或字符类:

"Hello World\n\nhello world".split(/\n(?:\n|\t|\s)*\n/)
"Hello World\n\nhello world".split(/\n\s*\n/) # (\t and \n are already included in \s)

注意:如果你也想删除前导和尾随空格,你可以使用:

/(?:[^\S\n]*\n){2}\s*/

关于正则表达式拆分期间出现javascript未定义元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292479/

相关文章:

javascript - 带有片段的 jQuery .data()

javascript - 如何在不使用 .then 语法的情况下使 fetch promise 解析?

Jquery 验证插件验证日期,例如 20/8/2013 Safari Bug?

php - 在 mysql 中使用 REGEX 对特定字符进行严格的数字检查

javascript - 为什么 Node.js 在这两种用途中似乎以不同方式传递参数?

javascript - 按钮值传递到模式

javascript - 如何向 Ember 中的提交操作添加参数?

ruby-on-rails - 使用正则表达式验证 URL/域? ( rails )

javascript - 在 javascript 中,我无法弄清楚如何使正则表达式仅替换捕获而不替换匹配

正则表达式替换函数 : in cases of no match, $1 返回整行而不是空