我有一个字符串,我正在尝试使用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编辑器中尝试了相同的正则表达式并且匹配那里。我不知道我哪里出错了。有人可以帮我找到问题吗?
答案 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;
不匹配