function excludeSubstring(inputString, substringToDelete) { const regex = new RegExp( `(^\\b${substringToDelete}\\b,*)|(,*\\b${substringToDelete}\\b)` ); return inputString.replace(regex, "");}// 举例'12,34,56'.replace(/(^12,*)|(,*12)/,'')
如何简化这个正则呢?
或者是否有其他实现方式(正则)?
如果已知字符串都是 ,
隔开的话,可以直接转换为数组过滤,没必要使用正则,这种过滤的方式应该比正则更容易理解吧
let string = '12,34,56,12';function excludeSubstring(inputString,substringToDelete){ return inputString.split(',').filter(item => item !== substringToDelete).join(',');}excludeSubstring(string,'12');
用零宽断言/(?<=^|,)12(?=,|$)/
'12,34,56,12,34,56,12'.replace(/(?<=^|,)12(?=,|$)/g, '[]')
结果是 [],34,56,[],34,56,[]
删除的话,正则改一下,需要一点点额外 JS 辅助一下
'12,34,56,12,34,56,12'.replace(/(^|,)12(,|$)/g, function($0, $1, $2){ // console.log($0, $1, $2); return ($1===$2 ? ',' : '');})
结果是 34,56,34,56
首先,你的正则表达式 (^${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
的子串。然后,它将数组转换回字符串。这个函数在处理大型字符串时可能比使用正则表达式更快。
正则表达式是一系列的字符串。这些包含超过其字面含义的字符串被称之为元字符。例如,一个符号前面的引用符代表一个人的言语能力,或者按照上面的说法,代表着meta-meaning[1]。正则表达式是一组字符串和(或者)一组匹配(特定的)模式的元字符。 一个正则表达式包含下面的一个或多个选项: 一组字符串。这是仅仅表示字面意思的字符串。最简单形式的正则表达式仅仅包含一组字符串。 一个锚字符。锚节点指定了正
主要内容:实例,为什么使用正则表达式?,发展历史,应用领域除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。 例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。像 data(\w)?\.dat 这样的模式将查找下列文件: 使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下
本文向大家介绍javascript正则表达式简介,包括了javascript正则表达式简介的使用技巧和注意事项,需要的朋友参考一下 概述 正则表达式是事先声明一组规则,用于匹配字符串中的字符。 基本语法 元字符 在正则表达式的模式中,有一些字符是有特殊含义的,被称为元字符。元字符都是针对单个字符匹配的。 \w 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于 [a-zA-Z0-
(?:x) (x) 这两个好像可以平价替换的吧。有什么特殊应用吗?
昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?
18.3. 优化正则表达式 Soundex 函数的第一件事是检查输入是否是一个空字符串。 怎样做是最好的方法? 如果你回答 “正则表达式”,坐在角落里反省你糟糕的直觉。正则表达式几乎永远不是最好的答案,而且应该被尽可能避开。 这不仅仅是基于性能考虑,而是因为差错和维护都很困难,当然性能也是个原因。 这是 soundex/stage1/soundex1a.py 检查 source 是否全部由字母构成