gpt4 book ai didi

javascript - 为什么以下正则表达式会删除单引号内的边界字符?

转载 作者:行者123 更新时间:2023-12-01 16:04:30 26 4
gpt4 key购买 nike

此代码将直单引号转换为弯单引号:

var result = 'This \'is an\' example'.replace(/(?<!\w)\'\S(.*?)\S\'(?!\w)/g, '&lsquo;$1&rsquo;')
alert(result)

我以为输出会是:

This ‘is an’ example

但是输出是这样的:

This ‘s a’ example

我不确定为什么要删除引号内的边界字符。

这是为什么以及如何解决?

https://jsfiddle.net/gz5wjoqx/

最佳答案

您正在匹配两个 \S 部分而不捕获它们:

.replace(/(?<!\w)\'\S(.*?)\S\'(?!\w)/g
// ^^ ^^

因此,当您替换为第一个用引号括起来的捕获组时:

'&lsquo;$1&rsquo;'
// ^^

\S 中的字符不在 (.*?) 捕获组中,因此它们不包含在 $1 中> 更换。

将你想要替换的所有内容放入捕获组:

var result = 'This \'is an\' example'
.replace(
/(?<!\w)'(\S.*?\S)'(?!\w)/g,
'&lsquo;$1&rsquo;'
);
console.log(result)

(另请注意,' 不需要在模式中转义)

您还可以考虑使用 \B(“不是单词边界”)来代替 \w 的负环视,这将使该模式与旧版浏览器兼容 < em>和更简洁:

var result = 'This \'is an\' example'
.replace(
/\B'(\S.*?\S)'\B/g,
'&lsquo;$1&rsquo;'
);
console.log(result)

关于javascript - 为什么以下正则表达式会删除单引号内的边界字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60690019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com