你的第一个 func 几乎是正确的。只需删除代表“全局”(编辑)的“g”标志,并为其提供一些上下文以发现第二个“r”。
编辑:之前没有看到它是第二个 'r',所以添加了 '/'。使用 regEx arg 时需要 \/ 来转义“/”。感谢您的投票,但我错了,所以我会修复并为有兴趣更好地理解 regEx 基础知识的人添加更多细节,但这会起作用:
mystring.replace(/\/r/, '/')
现在为过度解释:
当读/写正则表达式模式时,请考虑:<一个字符或一组字符> 后跟 <一个字符或一组字符> 后跟 <...
在正则表达式中,<一个字符或一组字符> 可以是一个:
/each char in this pattern/
所以读为e,然后是a,然后是c,等等......
或者单个 <a character or set of charcters> 可以是字符类描述的字符:
/[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 的关键是将其分解为这些部分。