Javascript匹配不';行不通
我有一个字符串,正在尝试使用正则表达式提取一个子字符串。以下是一个例子:Javascript匹配不';行不通,javascript,regex,Javascript,Regex,我有一个字符串,正在尝试使用正则表达式提取一个子字符串。以下是一个例子: var mainString = "SNOW ", stringToMatch = 'snow', regExp = new RegExp(stringToMatch + '[,\\s][^a-zA-Z]','ig'); var match = mainString.match(regExp); console.log(匹配)给我一个null 我在regexr.com编辑器中尝试了相同的正则表达式,它在那里
var mainString = "SNOW ",
stringToMatch = 'snow',
regExp = new RegExp(stringToMatch + '[,\\s][^a-zA-Z]','ig');
var match = mainString.match(regExp);
console.log(匹配)
给我一个null
我在regexr.com编辑器中尝试了相同的正则表达式,它在那里匹配。我看不出我错在哪里。有人能帮我找到问题吗?您得到了正确的结果。雪之所以不在,是因为没有什么空间后才这样
[^a-zA-Z]
不匹配任何内容问题在于正则表达式构造中:
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]
我已经编辑了我的输入。请您现在检查并让我知道我的错误所在。问题是相同的,空格后没有匹配项,因此[^a-zA-Z]没有匹配项。如果您的输入是“雪-”它将匹配此工作,谢谢Ed!我不明白“它与字符串的结尾不匹配,这不是一个字符,将由$”表示的部分。如果你不介意,请解释一下好吗?@Ritu很乐意帮忙!我的意思是,[^a-zA-Z]
只匹配实际字符,例如2
、
或
。它与字符串本身的结尾不匹配。换句话说,想象一下这个正则表达式/.^a-z]/gi
和这个文本a@b@c
。在这种情况下,a@
和b@
将匹配c
不匹配,因为c
之后没有匹配[^a-z]
的内容。要允许字符串结尾匹配,可以使用$
,如下所示:/([^a-z]|$)/gi
。然后,任何后跟(1)非字母字符或(2)字符串结尾的字符都匹配。所以,a@
、b@
和c
将是您的匹配项。明白了!感谢您的详细解释:)