【发布时间】:2021-02-03 04:23:52
【问题描述】:
有一个多行字符串的变换。
!a! b!
应该变成
.a. b.
和
!a! b!
c!
!d!
应该变成
.a. b.
c!
!d!
我回头看它:
str(/(?<!\n)([^\n!]*)!+/g, '$1.')
它没有按预期工作:
.a. b.
c.
!d.
拆分字符串并转换第一行似乎很简单。但是有没有一种可靠的方法可以仅在多行字符串的第一行中使用正则表达式进行替换?
也希望能解释一下我的方法到底出了什么问题,所以它失败了。
这个问题不仅限于 JS 正则表达式风格,但我首先对这个感兴趣。
【问题讨论】:
-
可能使用 2 个捕获组
!([^\s!]+)!([^\S\r\n]+[^\s!])!regex101.com/r/QtwImV/1 并替换为.$1.$2. -
您也可以使用 SKIP FAIL 例如
^!?[^\r\n!]*!$(*SKIP)(*FAIL)|!regex101.com/r/eAwZHD/1 -
@Thefourthbird 非常感谢,这两个建议看起来都不错,考虑将它们发布为答案。
标签: javascript regex regex-lookarounds