在回答我的一个问题时,有人发布了:
// 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]);
}
}
我完全迷失在/(;)(?![";"])/
。它对我来说看起来像一堆随机符号:(。
我在哪里可以了解有关正则表达式语法的更多信息?
答案 0 :(得分:6)
有各种资源:
关于实际表达式,/
个字符标记正则表达式文字的开头和结尾(就像字符串的引号一样,尽管结尾/
可能后跟标志),然后:
+------------- 1 |+------------ 2 ||+----------- 3 ||| +--------- 4 ||| | ||| | ||| | +------- 5 ||| | | +----- 6 ||| | | | +--- 7 ||| | | | |+-- 8 |||/ \|/ \|| /(;)(?![";"])/
(
会启动一个捕获组(因为(
后面没有?
,=
或!
更改了它一样);
是一个文字,它与分号匹配)
结束捕获组(?!
启动“否定前瞻”,这样只有在分号后面找不到括号内的内容时,整体表达式才会匹配[
开始一个字符类,匹配其中的任何字符";"
是字符类中的字符。 (第二个"
是多余的。)字符类包含;
和"
。]
结束字符类)
结束了在#4 总而言之,匹配(和捕获)分号,前提是它不会立即跟引号或分号。我看不出捕获分号的任何特定原因,但也许在推荐这个问题的背景下有一个原因。
答案 1 :(得分:2)
我有一个cheat sheet from visibone我经常回复。我发现这非常有用
答案 2 :(得分:1)
查看http://www.regular-expressions.info/lookaround.html
正则表达式中真正令人困惑的一点是负向前瞻部分,它在javascript中使用(?! ... )
语法表示。一旦你理解了这一点,剩下的就非常简单了。
答案 3 :(得分:0)
学习任何东西的最好方法就是做。这是一个简单的测试人员,可以让你看到表达式的作用:https://regex101.com/