首先,你的正则表达式 (^${substringToDelete},*)|(,*${substringToDelete})
已经能够正确地匹配以 substringToDelete
开头或结尾的子串。
然而,这个正则表达式在处理某些特殊情况时可能不够理想。例如,如果你的输入字符串是 "12,34,56,12,78",并且你想删除所有的 "12",那么你的正则表达式只会删除第一个 "12",而不会删除后面的 "12"。
这是因为你的正则表达式只能匹配以 "12" 开头或结尾的子串,而不能匹配中间的 "12"。
如果你希望简化这个正则表达式,并让它能够匹配任何位置的 "12",你可以使用以下正则表达式:
`.*${substringToDelete}.*`
这个正则表达式可以匹配任何包含 substringToDelete
的子串,无论它出现在字符串的哪个位置。
但是请注意,这个正则表达式的性能可能不如你原来的正则表达式。在处理大型字符串时,它可能会比原来的正则表达式慢一些。
另一个可能的解决方案是使用 JavaScript 的 split
和 filter
方法,而不是正则表达式。例如:
function excludeSubstring(inputString, substringToDelete) {
return inputString.split(new RegExp(`(${substringToDelete})`, 'g')).filter(Boolean).join('');
}
这个函数会将输入字符串分割成一个数组,数组的每个元素都是一个不包含 substringToDelete
的子串。然后,它将数组转换回字符串。这个函数在处理大型字符串时可能比使用正则表达式更快。
用零宽断言
/(?<=^|,)12(?=,|$)/
结果是
[],34,56,[],34,56,[]
删除的话,正则改一下,需要一点点额外 JS 辅助一下
结果是
34,56,34,56