mow*_*ker 3 javascript regex lookahead
在回答我的一个问题时,有人发布了:
// could replace it with an easier to work with delimiter
str.replace(/(;)(?![";"])/g, '|')
// or split it, but skip over results that are just a ;
var strArr = str.split(/(;)(?![";"])/);
for (s in strArr) {
if (strArr[s] !== ";") {
// do something with strArr[s]
console.log(strArr[s]);
}
}
Run Code Online (Sandbox Code Playgroud)
我完全迷失了/(;)(?![";"])/.它看起来像一堆随机符号给我:(.
哪里可以了解有关正则表达式语法的更多信息
有各种资源:
关于实际表达式,/字符标记正则表达式文字的开头和结尾(类似于字符串的引号,尽管结尾/可能后跟标志),然后:
+------------- 1
|+------------ 2
||+----------- 3
||| +--------- 4
||| |
||| |
||| | +------- 5
||| | | +----- 6
||| | | | +--- 7
||| | | | |+-- 8
|||/ \|/ \||
/(;)(?![";"])/
(在这种情况下开始捕获组(因为(后面没有?,=或者!它改变它做什么); 是一个文字,它匹配分号) 结束捕获组(?! 启动"负向前瞻",这样整体表达式只有在分号后面找不到括号内的内容时才匹配[ 开始一个字符类,匹配其中的任何字符";"是字符类中的字符.(第二个"是冗余的.)字符类包含contains ;和".] 结束角色类) 结束#4开始的负向前瞻总而言之,匹配(并捕获)分号,前提是它不会立即跟引号或分号.我看不出捕获分号的任何特定原因,但也许在推荐这个问题的背景下有一个原因.