Javascript匹配不起作用

时间:2016-01-26 18:52:22

标签: javascript regex

我有一个字符串,我正在尝试使用Regex提取子字符串。这是一个例子:

var mainString = "SNOW ",  
stringToMatch = 'snow',  
regExp = new RegExp(stringToMatch + '[,\\s][^a-zA-Z]','ig');  
var match = mainString.match(regExp); 

console.log(match)给了我一个null

我在regexr.com编辑器中尝试了相同的正则表达式并且匹配那里。我不知道我哪里出错了。有人可以帮我找到问题吗?

2 个答案:

答案 0 :(得分:1)

问题出在你的正则表达式构建中:

regExp = new RegExp(stringToMatch + '[,\\s][^a-zA-Z]','ig');

[^a-zA-Z]匹配不在集[a-zA-Z]中的任何字符 * 它与字符串的结尾不匹配,这是不是字符,将由$表示。因此,您的正则表达式将匹配"sNoW ,""sNoW 1""SNOW,#"(例如),但不匹配"Snow,""Snow "

你可能想要:

// match a non-alphabetic character or the end of the string
regExp = new RegExp(stringToMatch + '[,\\s](?:[^a-z]|$)','ig');

// or

// simply match the word and then stop at a word boundary, \b
regExp = new RegExp(stringToMatch + '\\b','ig');

*请注意,[a-zA-Z]i标志是多余的;只需使用[a-z]

答案 1 :(得分:0)

您获得了正确的结果。 SNOW 不在结果中,因为空格后没有任何内容,所以

elif [ $input = "3" ]; then  
    echo "enter package name"  
    read package  
    apt-get build-dep $package  
    apt-get install $package -y  2>&1 >> /var/log/installlog  2>&1 
    exitstatus=$(echo $?)  
    if [ $exitstatus = "0" ]; then  
        figlet Installation Successful  
    else  
        figlet Failure   
        echo "check /var/log/installlog"  
        figlet check now?  
        echo "y or n"  
        read input2   
            if [ $input2 = "y" ]; then  
                cat /var/log/installlog  
            fi;  
    fi;  

不匹配