JS演示:包含^和*的正則表達式會丟失一個字符?
// words not ending with abc
var r = new RegExp("(.*)[^(?:abc)]$")
var s = 'zzxxxyy'
console.log(r.exec(s))
輸出:
[ 'zzxxxyy', 'zzxxxy', index: 0, input: 'zzxxxyy' ]
爲什麼group(1)
zzxxxy
,而不是zzxxxyy
JS演示:包含^和*的正則表達式會丟失一個字符?
// words not ending with abc
var r = new RegExp("(.*)[^(?:abc)]$")
var s = 'zzxxxyy'
console.log(r.exec(s))
輸出:
[ 'zzxxxyy', 'zzxxxy', index: 0, input: 'zzxxxyy' ]
爲什麼group(1)
zzxxxy
,而不是zzxxxyy
[^(?:abc)]
單個字符不是(
或?
或:
或a
匹配或b
或c
或)
。它相當於[^)(abc:?]
。
因此,如果想使用正則表達式匹配不以'abc'結尾的字符串,而不是'(。* )[^ a] [^ b] [^ c]',怎麼做? '(。*)(?!abc)'仍然會匹配1abc。 –
@JiacaiLiu'if(!/ abc $ /。test(str))'。取而代之的是在JS代碼中取消結果。 – melpomene
它的工作原理,但在我的情況下,只能使用正則表達式。 –
https://regex101.com/r/sIbCyd/3 - 仔細閱讀說明面板,*小心*。 –
你不能在[字符類](http://www.regular-expressions.info/charclass.html)中使用組 – Bergi