javascript - 正则表达式匹配除两个保留字符串之外的任何字符串?

标签 javascript regex

可能很简单,但我对创建正则表达式的了解有点模糊。

我正在尝试匹配任何后跟逗号和空格的字符串,除非它是“Bair Hugger”或“Fluid Warmer”

这是我目前的情况

var re_comma = new RegExp("\w+[^Bair Hugger|Fluid Warmer]" + ", ", "i");

有什么想法吗?

最佳答案

新答案

关于你的例子,我会说拆分字符串并迭代它真的更容易:

function filter(str, delim, test) {
    var parts = str.split(delim),
        result = [];

    for(var i = 0, len = parts.length; i < len; i++) {
        if(test(parts[i])) result.push(parts[i]);
    }

    return result.join(delim);
}

str = filter(str, ', ', function(s) {
    s = s.toLowerCase();
    return s === 'bair hugger' || s === 'fluid warmer';
});

否则,你的表情会变成这样:

new RegExp("(^|, )(?!(?:Bair Hugger|Fluid Warmer)(?:$|, )).+?(, |$)", "i");

并且您必须使用回调来进行替换,以决定是否删除前面的 , 或尾随的 ,:

str = str.replace(re_comma, function(str, pre, tail) {
    return pre && tail ? tail : '';// middle of the string, leave one
});

这段代码的意图不太清楚。也许有更简单的表达方式,但我认为过滤数组仍然更清晰。


旧答案:(不解决手头的问题,但提供有关正则表达式的信息)。

[] 表示一个字符类,并且只会匹配您提供的字符中的一个 字符。 [^Bair Hugger|Fluid Warmer][^Bair Huge|FldWm] 相同。

您可以使用否定前瞻:

new RegExp("^(?!(Bair Hugger|Fluid Warmer), ).+?, $", "i");

请注意,您必须在字符串中使用 \\ 才能生成一个 \。否则,"\w" 将变为 w 并且不再是特殊字符序列。您还必须锚定表达式。

更新:正如您提到的要匹配逗号前的任何字符串,我决定使用 . 而不是 \w,以便匹配任意字符。

关于javascript - 正则表达式匹配除两个保留字符串之外的任何字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8573668/

相关文章:

javascript - Pinchin 不调用 Hammer 库

javascript - 如何使用javascript将html中的水印添加到pdf导出器

c# - 正则表达式 - 改进搜索并添加第三组

c - C 中的 Posix 正则表达式

正则表达式允许以逗号分隔的代码列表

javascript - 返回多个模板

javascript - 显示从函数返回的 HTMLTableElement 对象

javascript - Angular 2 : Directives: capturing click event on children

Javascript 正则表达式帮助,负向前瞻

javascript - JS 字符串中的行尾(也称为换行符)