你的第一个玩笑几乎是对的。只需要删除代表“global”(编辑)的“g”标志,并给它一些上下文来发现第二个“r”。
编辑:没有看到前面是第二个“r”,所以加上了“/”。当使用正则表达式参数时,需要\/转义'/'。谢谢你的点赞,但我错了,所以我将修复和添加更多细节,让有兴趣更好地理解regEx基础知识的人,但这是可行的:
mystring.replace(/\/r/, '/')
现在是过度的解释:
当读取/写入一个正则表达式模式时,可以这样思考:<一个字符或一组字符>后面跟着<一个字符或一组字符>后面跟着<…
在regEx <一个字符或一组字符时,>一次可以是一个:
/each char in this pattern/
所以读成e,接着是a,接着是c,等等……
或者单个<a字符或字符集>可以是由字符类描述的字符:
/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)
或者扩展到匹配一定数量的字符(但最好还是按照顺序模式将其视为单个元素):
/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would
/[aA]{1,3}/
//1-3 matches of 'a' or 'A'
/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class
/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)
所以把它们挤在一起:
var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can eat098765';
joesStr.match(rePattern);
//returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
//without the 'g' after the closing '/' it would just stop at the first match and return:
//["aaaAAAaaEat at Joes123454321"]
当然,我已经详细阐述过了,但我的观点很简单:
/cat/
是一个由3个模式元素组成的系列(一个事物接着一个事物再接着一个事物)。
这也是:
/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/
就像regEx开始看起来一样古怪,它都分解为一系列的东西(可能是多字符的东西)按顺序相互跟随。这是一个基本的观点,但我花了一段时间来理解它,所以我在这里过度解释它,因为我认为这将有助于OP和其他新regEx理解发生了什么。读取/写入regEx的关键是将其分解成这些部分。