我有一个这样的字符串:#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);
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+ 个字符
或者,使用split
with/(?:\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,}/));
添加回答
举报
0/150
提交
取消