javascript – 了解正则表达式?
作者:互联网
在回答我的一个问题时,有人发布了:
// 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]);
}
}
我完全迷失在/(;)(?![“;”])/.它看起来像一堆随机符号给我:(.
哪里可以了解有关正则表达式语法的更多信息
解决方法:
有各种资源:
> MDC
> The specification(但那将是艰难的)
> JavaScript Kit的intro和reference
> evolt的Regular Expressions in JavaScript
关于实际表达式,/ characters标记正则表达式文字的开头和结尾(就像字符串的引号一样,尽管结尾/可能后跟标志),然后:
+------------- 1 |+------------ 2 ||+----------- 3 ||| +--------- 4 ||| | ||| | ||| | +------- 5 ||| | | +----- 6 ||| | | | +--- 7 ||| | | | |+-- 8 |||/ \|/ \|| /(;)(?![";"])/
>(在这种情况下启动一个捕获组(因为(后面没有?,=或!改变了它的作用)
>;是一个文字,它匹配分号
>)结束捕获组
>(?!启动“负向前瞻”,这样整体表达式只有在分号后面找不到括号内的内容时才匹配
> [开始一个字符类,它匹配其中的任何字符
>“;”是字符类中的字符. (第二个“是多余的.”字符类包含contains;和“.
>]结束角色类
>)结束#4开始的负向前瞻
总而言之,匹配(并捕获)分号,前提是它不会立即跟引号或分号.我看不出捕获分号的任何特殊原因,但也许在推荐这个问题的背景下有一个原因.
标签:javascript,regex,lookahead 来源: https://codeday.me/bug/20190723/1515553.html