Javascript 如何使用正则表达式匹配一个字符,而不是两个字符

Javascript 如何使用正则表达式匹配一个字符,而不是两个字符,javascript,regex,Javascript,Regex,使用javascript正则表达式,如何匹配一个字符,同时忽略任何其他也匹配的字符 示例1:我想匹配$,但不是$$或$$。 示例2:我希望匹配$$,但不匹配$$ 正在测试的典型字符串是“$$$$$asian-italian” 从用户体验的角度来看,用户选择或取消选择一个复选框,该复选框的值与项目列表中的标记匹配。所有标签必须匹配(选中)才能显示项目 function filterResults(){ // Make an array of the checked inputs var

使用javascript正则表达式,如何匹配一个字符,同时忽略任何其他也匹配的字符

示例1:我想匹配$,但不是$$或$$。 示例2:我希望匹配$$,但不匹配$$

正在测试的典型字符串是“$$$$$asian-italian”

从用户体验的角度来看,用户选择或取消选择一个复选框,该复选框的值与项目列表中的标记匹配。所有标签必须匹配(选中)才能显示项目

    function filterResults(){

// Make an array of the checked inputs
var aInputs = $('.listings-inputs input:checked').toArray();
// alert(aInputs);
// Turn that array into a new array made from each items value.
var aValues = $.map(aInputs, function(i){
    // alert($(i).val());
    return $(i).val();
});
// alert(aValues);
// Create new variable, set the value to the joined array set to lower case.
// Use this variable as the string to test
var sValues = aValues.join(' ').toLowerCase();
// alert(sValues);

// sValues = sValues.replace(/\$/ig,'\\$');
// alert(sValues);

// this examines each the '.tags' of each item
$('.listings .tags').each(function(){
    var sTags = $(this).text();
    // alert(sTags);
    sSplitTags = sTags.split(' \267 '); // JavaScript uses octal encoding for special characters
    // alert(sSplitTags);
    // sSplitTags = sTags.split(' \u00B7 '); // This also works

    var show = true;

    $.each(sSplitTags, function(i,tag){

        if(tag.charAt(0) == '$'){
            // alert(tag);
            // alert('It begins with a $');
            // You have to escape special characters for the RegEx
            tag = tag.replace(/\$/ig,'\\$');
            // alert(tag);
        }           

        tag = '\\b' + tag + '\\b';

        var re = new RegExp(tag,'i');

        if(!(re.test(sValues))){
            alert(tag);
            show = false;
            alert('no match');
            return false;
        }
        else{
            alert(tag);
            show = true;
            alert('match');
        }
    });

    if(show == false){
        $(this).parent().hide();
    }
    else{
        $(this).parent().show();
    }

});

// call the swizzleRows function in the listings.js
swizzleList();
}
提前谢谢

诸如此类:

q=re.match(r"""(x{2})($|[^x])""", 'xx')

q.groups() ('xx', '')

q=re.match(r"""(x{2})($|[^x])""", 'xxx')

q is None True
说明:在两个单词边界之间匹配x(有关单词边界的更多信息,请参阅)<代码>\b包括字符串的开头或结尾

我在利用你问题中的空间划分。如果没有,则需要一个更复杂的表达式,如
(^x$^x[^x].[^x]x[^x].[^x]x$)
,以匹配字符串开头和/或结尾的不同位置。这将把它限制为单字符匹配,而第一个模式匹配整个令牌


另一种方法是将字符串标记化(在空格处拆分)并从标记中构造一个对象,您只需查看给定字符串是否与其中一个标记匹配即可。每次查找的速度应该比正则表达式快得多。

通常,使用正则表达式,您可以使用
(?来匹配
x
,该
x
前面或后面都没有
x

对于符合ECMAScript 2018+标准的现代JS引擎,您可以使用基于lookback的正则表达式:

(?<!\$)\$(?!\$)
(?
查看JS演示(仅在中运行,其数量正在增长,请查看此处的列表):

const str=“$$$$亚洲意大利语”;

const regex=/(?是否需要它来匹配单个
$
字符的多个匹配项?还是只匹配第一个字符?是否可以发布正在搜索的字符串的示例,以及每个字符串的预期输出是什么?如“aaa”。替换(/a[^a]/,”)?通常它与(.*a[^a].*)类似谢谢@amadeus,我不知道我是做错了还是解释得不够好。我已经修改了问题和代码。谢谢@BenjaminDangerJohnson,我不知道我是做错了还是解释得不够好。我已经修改了问题和代码。问题标记为JavaScript,而不是Python。我已经实现了d您的解决方案,@PhilH。它适用于不需要像“o”这样转义的字符。因此我接受您的解决方案。但是,在转义“$”时我做得不对。因此,我还有一些工作要做。此外,我还必须研究你关于用令牌构造对象的建议。我还不是程序员,只是一个试图提高技能的网页设计师。谢谢你的帮助!
(?<!\$)\$(?!\$)