regex - 正则表达式:仅在特定行中匹配和替换空格
问题描述
我敢肯定,当我阅读答案时,我会把头撞到墙上,但我无法弄清楚这一点。
我有一个带有假数据的 JSON 来填充数据库。一个属性称为“slug”,包含一个我想“slugify”的字符串。
所以这:
[
{
blah: '[...]'
slug: 'Plem ap at rem',
bleh: '[...]',
},
{
blah: '[...]'
slug: 'Etiam vel augue',
bleh: '[...]',
},
]
应该变成:
[
{
blah: '[...]'
slug: 'Plem-ap-at-rem',
bleh: '[...]',
},
{
blah: '[...]'
slug: 'Etiam-vel-augue',
bleh: '[...]',
},
]
我想首先定位价值并绝望地只捕获空间:
slug: '(?:[\w]*([\s])*)+'
我在环顾四周有些混乱,但没有运气。
PS:我打算在 VSCode 的 find&replace 中使用它,但也欢迎知道我将如何在纯 JS中执行此操作!
解决方案
从 Visual Studio Code v.1.31.0 版本开始,您可以使用无限宽度的前瞻和后瞻,而不受任何约束。
您可以使用
查找内容: (?<=slug: '[^']*)\s
替换为:-
细节
(?<=slug: '[^']*)
- 字符串中的位置,前面紧跟slug:
、 空格'
和 0+ 字符,而不是'
\s
- 一个空格。
查看演示屏幕截图:
既然你问如何在 JavaScript 中做到这一点:
const text = `[\n {\n blah: '[...]'\n slug: 'Plem ap at rem',\n bleh: '[...]',\n },\n {\n blah: '[...]'\n slug: 'Etiam vel augue',\n bleh: '[...]',\n },\n ]`;
console.log(text.replace(/(?<=slug: '[^']*)\s/gi, '-'))
或者,如果您使用的是 Safari 或任何其他不支持 ECMAScript 2018 标准的 JS 环境:
const text = `[\n {\n blah: '[...]'\n slug: 'Plem ap at rem',\n bleh: '[...]',\n },\n {\n blah: '[...]'\n slug: 'Etiam vel augue',\n bleh: '[...]',\n },\n ]`;
console.log(text.replace(/(slug:\s*')([^']*)/gi, function(m,x,y) {
return x + y.replace(/\s+/g, '-');
}));
推荐阅读
- c++ - C++11 标准中的哪个部分规定了原始数据类型大小之间的相对顺序?
- python - 将字典传递给具有 base_estimator 特征的 sklearn 分类器
- copy - Tinymce - 文本格式未通过复制和粘贴传输
- c - 如何使用 sscanf 进行更长的字符串分析
- asp.net-mvc - Auth0- 如何同时使用 lock-js 和 auth-js 功能?
- setuptools - 从 python bdist_egg 或 bdist_wheel 中排除单个源文件
- python - 有没有一种有效的方法将二维图存储为 python 中的矢量图形?
- lambda - 如何在需要接口的地方直接传递 lambda
- javascript - 为什么 redux-saga 使用 put 方法而不是 dispatch?
- spring-boot - spring security oauth 和 JWT 阻止所有请求