Javascript 仅在第一行中替换正则表达式
存在多行字符串的转换Javascript 仅在第一行中替换正则表达式,javascript,regex,regex-lookarounds,Javascript,Regex,Regex Lookarounds,存在多行字符串的转换 !a! b! 应该成为 .a. b. .a. b. c! !d! 及 应该成为 .a. b. .a. b. c! !d! 我回头看了看它: str(/(?<!\n)([^\n!]*)!+/g, '$1.') 拆分字符串并转换第一行似乎很简单。但是,是否有可靠的方法仅用正则表达式替换多行字符串的第一行 我也希望能解释一下我的方法到底出了什么问题,所以它失败了 问题不限于JS正则表达式的味道,但我首先对这个感兴趣。关于您尝试的模式: (?负向后看,断言直接向
!a! b!
应该成为
.a. b.
.a. b.
c!
!d!
及
应该成为
.a. b.
.a. b.
c!
!d!
我回头看了看它:
str(/(?<!\n)([^\n!]*)!+/g, '$1.')
拆分字符串并转换第一行似乎很简单。但是,是否有可靠的方法仅用正则表达式替换多行字符串的第一行
我也希望能解释一下我的方法到底出了什么问题,所以它失败了
问题不限于JS正则表达式的味道,但我首先对这个感兴趣。关于您尝试的模式:
(?负向后看,断言直接向左的不是换行符或
捕获组1,匹配除换行符或([^\n!]*)
匹配1+次!(要删除的内容)!+
([^\n!]*)
,它也将匹配单个!除非前面有换行符
如果可以使用SKIP FAIL,则可以首先匹配要避免的内容,在本例中,这是一行,可以选择以感叹号开头,以感叹号结尾,中间没有 之后,匹配所有其他感叹号,并用点替换它们
^!?[^\r\n!]*!$(*SKIP)(*FAIL)|!
见
另一种选择是使用2个捕获组 第一组将在第一组感叹号之间匹配,第二组将在后跟除!以外的字符后匹配空格 然后在末尾匹配!使其不在替换中
!([^\s!]+)!([^\S\r\n]+[^\s!])!
看另一个
在替换中,使用2个带点的捕捉组
.$1.$2.
也许使用2个捕获组<代码>!([^ \r\n++[^ s]!)!< /代码>,用<代码>替换。$ 1。2。也可以使用跳过失败。例如,代码> ^ ^![^ ^ r\n!!*!$(*kip)(*FAILL)!< /代码> @ TeththBood多谢,两个建议看起来不错,考虑把它们作为答案。