正则表达式,用于匹配不是字符串“ABCD”的任何内容
Regular expression to match anything that isn't the string "ABCD"
如何编写一个与给定字符串("ABCD")以外的所有内容匹配的Javascript正则表达式?
类似于/[^ABCD]/
,除了我不想匹配所有不是字母 A、B、C 或 D 的东西。我想匹配所有不是字符串"ABCD"的内容。
基本上我希望发生这种情况:
var myStr = "ABCA ABCB ABCD BCD ABC"
myStr.replace(/!(ABCD)/g,'') // returns ABCD
您可以简单地检查ABCD
,检查字符串中存在多少个,然后像这样从中构造一个新字符串(如果它更适合您的情况,您可以使用空格作为分隔符):
var res = myStr.match(/ABCD/g);
var str = res ? res.join('') : '';
- jsFiddle 演示
- String.match()
- Array.join()
三元之所以存在,是因为如果match()
什么也没找到,它将返回null
- 它没有join()
方法。
,我误解了这个问题。 似乎您想测试是否存在 ABCD
,如果找到它,请将整个字符串替换为:ABCD
. 这将做到这一点:
s = s.replace(/.*(ABCD).*/, '$1');
但是,如果字符串中没有ABCD
,它将保持字符串不变。 如果要在这种情况下删除字符串,则必须使捕获成为可选。 但是,您必须更改正则表达式的第一部分,使其"偷偷摸摸"捕获:
s = s.replace(/^(?:(?!ABCD).)*((?:ABCD)?).*$/, '$1');
这迫使它试图在每个位置捕获ABCD
。 (它也会大大减慢速度 - 在这种情况下不是问题,但是如果您在大型输入上使用这种技术,请记住这一点。
所以纯正则表达式解决方案确实存在,但我更喜欢@bažmegakapa的解决方案。 :D
原答案:
/^(?!ABCD$).*/
请注意,这也将匹配空字符串。 如果您有任何积极的要求,您可以将.*
更改为您需要的任何内容。 例如,要匹配一个或多个大写 ASCII 字母,但不匹配确切的字符串ABCD
,您可以使用:
/^(?!ABCD$)[A-Z]+$/
尝试一下:
var myStr = "ABCA ABCB ABCD BCD ABC";
var foo = myStr.replace(/'b(?!ABCD'b)'w+'b/g,'').trim(); // returns ABCD
document.write(foo);
输出:ABCD
或:
var myStr = "ABCA ABCB ABCD BCD ABCD ABC";
var foo = myStr.replace(/'b(?!ABCD'b)'w+'b/g,'').replace(/'s/g, '');
document.write(foo);
输出:ABCDABCD
这是否定的直接展开,不使用否定运算符:
/^'([^a]'|a[^b]'|ab[^c]'|abc[^d]')*$'|^a$'|^ab$'|^abc$/
当您将否定运算符调用为某种语言时,它会将要否定的表达式转换为类似于上层形式的表达式。
以下是我测试它的方式:
@ThinkPad-T420:~$ E='/^'([^a]'|a[^b]'|ab[^c]'|abc[^d]')*$'|^a$'|^ab$'|^abc$/ p;d'
@ThinkPad-T420:~$ echo abc | sed "$E"
abc
@ThinkPad-T420:~$ echo abcd | sed "$E"
@ThinkPad-T420:~$ echo abcde | sed "$E"
@ThinkPad-T420:~$ echo axbcde | sed "$E"
axbcde
@ThinkPad-T420:~$ echo xxabcde | sed "$E"
@ThinkPad-T420:~$
- jQuery中是否内置了任何字符串格式化函数
- 有人知道有没有jquery插件可以在图像上写文本,并让用户将其放置在图像内的任何位置
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- AngularJS-检测到n分钟内没有任何操作并进入默认状态
- 使用多功能框在 chrome 扩展程序中包含内联自动填充功能的任何方法
- 正则表达式,用于匹配不是字符串“ABCD”的任何内容
- 创建按钮不调用表单内的任何操作
- 在过去24小时内,谷歌应用程序脚本或可视化API的任何变化
- 使用 CasperJS 时,是否可以在执行任何内联或外部 Javascript 之前与加载页面的 DOM 进行交互
- 任何应用“webkit-overflow-scrolling: touch”与javascript内联的方法
- 输入类型“文本”的 ng-init 不会在文本框内显示任何数据
- 找不到“”;应用程序“;模板或视图.对象{fullName:“template:application”}将不呈现任何内
- 如何在没有任何内置函数的情况下将元素添加到数组中
- 如何获得元素id点击没有任何内联函数调用在javascript
- 在javascript/jquery中是否有任何内置功能来过滤邮件,如php's函数(!使用filter_var
- 在JavaScript中过滤数组,而不使用任何内置函数或新数组
- Jquery是否有任何内置方法来单独查找可验证的元素?
- 我试图在不使用任何内置方法的情况下延迟此函数.为什么这行不通呢?
- 如何在不使用javascript中任何内置函数的情况下反转字符串
- Angular Bootstrap-ui 是否有任何内置函数来处理打开或关闭的东西