javascript - JavaScript 正则表达式:删除括号、方括号和西里尔字符之间的文本
问题描述
有没有可能改变
(Test 1 / Test 2) [Test 3] Отдел / Here is title - subtitle (by Author) - 1234 (5678-9999), descriptions (best), more descriptions
至
Here is title - subtitle (1234) (descriptions)
将 JavaScript 与正则表达式一起使用?
目前,我必须结合多个替换功能,如下所示
let text = '(Test 1 / Test 2) [Test 3] Отдел / Here is title - subtitle (by Author) - 1234 (1234-4567), descriptions (best), more descriptions';
text = text
.replace(/ *\([^) ]*\) */g, "")
.replace(/ \([\s\S]*?\)/g, '')
.replace(/[0-9`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
console.log(text);
但它没有按预期工作。有人有想法么?
解决方案
输入这个作为“证明”它有效的答案;)
但是,正如我在评论中所说,它并不漂亮。一定会有更好的办法。
无论如何,它所做的就是使用(匹配)第一个括号对中的所有内容\([^)]*\)
。之后,它将所有内容匹配到/
(包括)与[^/]*?\/\s*
(使第一部分不贪婪,它最初不是)。然后它捕获标题,直到 (
,与([^(]*?)\s*\(
。之后是匹配的时间1234
。完成[^)]*\)\s*-\s*
。
捕捉时间1234
((\d+)
我假设它总是一个数字,否则你需要用类似的东西替换它([^)]*)
。
数学到描述\s*\([^)]*\),\s*
并用它捕获它(.*?)\s\(
(即\s\(
不在捕获组中得到它)。
最后将其余部分与.*$
(不是真的必要,但是...... :)
将所有这些替换$1 ($2) ($3)
为在正确的位置获得括号。瞧:D
let text = '(Test 1 / Test 2) [Test 3] Отдел / Here is title - subtitle (by Author) - 1234 (1234-4567), descriptions (best), more descriptions';
console.log(text.replace(/^\([^)]*\)[^/]*?\/\s*([^(]*?)\s*\([^)]*\)\s*-\s*(\d+)\s*\([^)]*\),\s*(.*?)\s\(.*$/gm, '$1 ($2) ($3)'));
推荐阅读
- groovy - 使用 Groovy 修剪视图标准中的绑定变量
- bash - 为什么使用通配符将参数数量减半会因“参数列表太长”而失败?
- json - 如何从 JSON 文件中导入字段?
- html - 如何在网格中放置重叠两行的图像
- mysql - Laravel 和 SQL 类型的良好实践
- javascript - 一旦函数返回 Promise {
} - node.js - Bootstrap 可以折叠,但汉堡菜单未显示项目
- java - 如何使用 HashMap 添加具有相同键的多个值(不同类型、一个 int 和一个字符串)?
- python - 在 Python 2.7 中截断 format() 中的整数
- amazon-s3 - 如何创建具有公共读取访问权限的存储桶?