为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 正则表达式 dotall 和 global 标志

JavaScript 正则表达式 dotall 和 global 标志

繁华开满天机 2021-06-27 13:19:55
我有一个这样的字符串:#ab#cd我想将其分解为以下部分#:#ab和#cd我已经用正则表达式尝试过这个,但我发现我无法让它工作。我认为以下方法可行:var test='#a\nb\n#c\nd';var re=/#.*?/gs;var match=test.match(re);alert(match.length);alert(match);也就是说,s修饰符通过换行符匹配,并且g修饰符选取多个实例。在?慵懒的量词应停止*从去太远。但是,我发现当我使用 just 时s,它只会到行尾。显然,我对正则表达式或match()方法都没有了解。顺便说一下,我知道这s只是 JavaScript 的最新补充,但我在 Electron 工作,它很容易获得。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

正则表达式对于这项工作来说太多了。使用内置字符串函数。


var str = `#a

b


#c

d`;


var chunks = str.split("\n\n");


console.log(chunks);


查看完整回答
反对 回复 2021-07-01
?
HUWWW

TA贡献1874条经验 获得超12个赞

如果唯一的目标是在以#您开头的行分割成部分,则可以使用


test.split(/^(?=#)/m)

见JS演示:


var test="#a\nb\n\n#c\nd";

console.log(test.split(/^(?=#)/m))

将.*?在模式的结尾永远不匹配任何字符,因为它是跳过模式的结束信号匹配查找完成。



s.match(/#.*(?:\r?\n(?!\r?\n).*)*/g)

查看正则表达式演示

细节

  • # - 一个#字符

  • .* - 除换行符以外的任何 0+ 个字符

  • (?:\r?\n(?!\r?\n).*)* - 0 次或多次重复

    • \r?\n(?!\r?\n) - 一个可选的 CR 然后是 LF,后面没有一个可选的 CR 然后是 LF

    • .* - 除换行符以外的任何 0+ 个字符

或者,使用splitwith/(?:\r?\n){2,}/匹配 2 个或更多换行符序列。

JS演示:

var test="#a\nb\n\n#c\nd";


console.log(test.match(/#.*(?:\r?\n(?!\r?\n).*)*/g));

console.log(test.split(/(?:\r?\n){2,}/));


查看完整回答
反对 回复 2021-07-01
  • 3 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信