猿问

JavaScript 正则表达式 dotall 和 global 标志

我有一个这样的字符串:


#a

b


#c

d

我想将其分解为以下部分#:


#a

b


#c

d

我已经用正则表达式尝试过这个,但我发现我无法让它工作。


我认为以下方法可行:


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 工作,它很容易获得。


繁华开满天机
浏览 231回答 3
3回答

森栏

正则表达式对于这项工作来说太多了。使用内置字符串函数。var str = `#ab#cd`;var chunks = str.split("\n\n");console.log(chunks);

HUWWW

如果唯一的目标是在以#您开头的行分割成部分,则可以使用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,}/));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答