使用正则表达式替换在字符串中的特定位置添加字符

时间:2018-10-16 17:24:13

标签: javascript regex

我有一个类似这样的字符串

Sales

我想添加连字符,因此最终字符串变为

rawSales
 .flatMap(Option(_))
 .keyBy(_.id)
 .reduceByKey(
   (sale1, sale2) => if (sale1.timestamp > sale2.timestamp) sale1 else sale2
 )

连字符应添加在第一个^((http|ftp|https):\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?之前的单词 字符串可以有多个Material TD Vandal High Supreme Signal Blue / University Red-B

我尝试了Material TD Vandal High Supreme Signal - Blue / University Red-B

尝试了几件事,但没有任何效果。

1 个答案:

答案 0 :(得分:0)

当您说连字符应先添加/ 时,问题是为什么要使用/g修饰符? g的意思是“全局”,它将尝试查找字符串中所有不重叠的正则表达式匹配项。您无需首先使用该修饰符。

第二,[A-Za-z]与一个单个字符匹配。由于正则表达式引擎从左到右匹配字符串,因此,与该模式匹配的字母应后跟一个空格和一个斜杠,因此它将匹配e /,而不是Blue /。要匹配整个单词,您需要在+之后添加[A-Za-z]量词。如果您不关心字母或数字(或\w),也可以只使用_。甚至\S+,一个或多个非空白也将起作用。

为使其与原始版本保持接近,我建议:

var result = string.replace(/[A-Za-z]+\s+\//, "- $&");

请参见regex demo

详细信息

  • [A-Za-z]+-1个或多个ASCII字母
  • \s+-超过1个空格
  • \/-一个/字符(转义,因为它用在正则表达式文字中)。

替换模式中的$&是指向整个匹配项的替换后向引用,无需使用捕获组来包装整个模式。