gpt4 book ai didi

JavaScript、正则表达式 - `.replace` 仅删除最后匹配的部分(当多个匹配时)

转载 作者:行者123 更新时间:2023-12-02 14:12:20 24 4
gpt4 key购买 nike

我正在修改音乐播放器,以便在破折号或左括号后不显示歌曲标题中的任何内容。

预期结果:

Bennie And The Jets - Remastered 2014

// Becomes

Bennie And The Jets

----

The 59th Street Bridge Song (Feelin' Groovy)

// Becomes

The 59th Street Bridge Song

----

December, 1963 (Oh What A Night!) - 2007 Remastered Version

// Becomes

December, 1963

----

Ave Verum

// Becomes (remains...)

Ave Verum

我用来进行修改的代码:

var song = 'some song name';

var title = function() {
var str = song;

var re = /(.*)(\s+((-|\()[^-\(]*))/g;

str = str.replace(re, '$1');

return str;
};

返回:

Bennie And The Jets

----

The 59th Street Bridge Song

----

December, 1963 (Oh What A Night!)

----

Ave Verum

第三种情况 - 同时有连字符或括号 - 不够。

我怎样才能强制它进行最远的匹配(以及接下来的一切)?

另外(编辑 #1)

在连字符的歌曲中,播放器不会在连字符前插入空格,因此连字符之前的条件为

\s+ //One or more

最终解决方案和使用(编辑#2)

(解决方案)

Andy Ray 提供,最终的正则表达式是:

var re2 = /\s*[(-].*$/;

(使用 - 对于任何对尾随歌曲修饰符有同样厌恶感的人)

有问题的音乐播放器是 Spotify Player (对于 Mac,但这应该对于其他平台同样有效)。您可以进行这样的更改,因为该应用程序被编写为 Chrome Embedded Framework (CEF) .

CEF 基本上是一个网站 - HTML、CSS 和(最重要的)JavaScript。因为如果这样,您可以尝试一下,尝试一下,自定义他们通常不会让您自定义的内容。

注意!!

以下过程和代码不会在其他任何地方更改您的歌曲标题,除了应用程序内和您进行更改的设备上。每次您打开帐户时,都会从服务器中提取您的所有帐户详细信息。

在 Mac 上,您可以在以下位置找到感兴趣的文件:

/Applications/Spotify.app/Contents/Resources/Apps

您将在其中找到一堆扩展名为 .spa 的文件。这些实际上并不是文件,而是包含相关内容的压缩目录。

我使用 The Unarchiver 解压它们

// In terminal
cd /Applications/Spotify.app/Contents/Resources/Apps
find ./ -name \*.spa -exec unar {} \; // Or just the couple you need
find ./ -name \*.spa -exec rm {} \; // Be careful!

无论您有压缩目录还是解压缩目录,Spotify 应用程序的运行方式都完全相同。

要修改歌曲标题(特别是在“歌曲”和“播放列表” View 中),您需要查看:

collection-songs/bundle.js
playlist-desktop/bundle.js

在这两个文件中,*只有一个track.name 的引用。快速查找将带您到达您需要去的地方。这些行是你的冒犯者。

在这两个文件中,更改行:

name: track.name, 

致:

name: function() {
var re1 = new RegExp('^' + '\\(.*\\).*', 'i')
var re1_2 = /(\((.*)\))/
var re2 = /\s*[(-].*$/g;

var str = track.name;

if(re1.test(str)) {
str = str.replace(re1_2, '$2');
}

str = str.replace(re2, '');

return str;
},

就这样,一切都完成了。

你开始

Spotify Before

并推出

Spotify After

注意!!

我上面问的问题只涉及:

var re2 = /\s*[(-].*$/g;

前面两个正则表达式(re1re1_2)的原因是因为某些歌曲(很少!)具有前括号:

(Everything I Do) I Do It For You

这两个表达式,以及

if(re1.test(str)) {
str = str.replace(re1_2, '$2');
}

让它看起来像

Everything I Do I Do It For You

如果这不是问题,您可以删除这些行。

这个小技巧在代码中可能不太漂亮,但在应用程序中看起来确实很不错。

最佳答案

我认为您的问题有更简单的解决方案。

为什么不直接替换字符串末尾的任何内容(从破折号或左括号开始),什么都不替换?

str.replace( /\s*[(-].*$/, '' );

说明:

\s* Any whitespace found before a paren or a -
[(-] either of the two characters "(" or "-"
.*$ everything else up to the end of the string

此外,您可以通过简单的 .substr().indexOf 检查这些字符来完成此操作。

关于JavaScript、正则表达式 - `.replace` 仅删除最后匹配的部分(当多个匹配时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421382/

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