首页 > 解决方案 > 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);

但它没有按预期工作。有人有想法么?

标签: javascriptjqueryregex

解决方案


输入这个作为“证明”它有效的答案;)

但是,正如我在评论中所说,它并不漂亮。一定会有更好的办法。

无论如何,它所做的就是使用(匹配)第一个括号对中的所有内容\([^)]*\)。之后,它将所有内容匹配到/ (包括)与[^/]*?\/\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)'));


推荐阅读