javascript - 从字符串中删除最后一个字符实例 - Javascript - 重访

标签 javascript regex string replace

根据 this question 接受的答案,以下是从字符串中删除某个字符的最后一个实例的语法(在本例中我想删除最后一个 &):

function remove (string) {

  string = string.replace(/&([^&]*)$/, '$1');
  return string;

}
console.log(remove("height=74&width=12&")); 

但我试图完全理解它为何有效。

根据 regex101.com,

/&([^&]*)$/

& matches the character & literally (case sensitive)

1st Capturing Group ([^&]*) Match a single character not present in the list below [^&]*

* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)

& matches the character & literally (case sensitive)

$ asserts position at the end of the string, or before the line terminator right at the end of the string (if any)

因此,如果我们将字符 & 与第一个 & 字面匹配:

enter image description here

那么为什么我们还要“匹配以下列表中出现的单个字符”?

enter image description here

似乎适得其反。

然后,“$ 断言字符串末尾的位置” - 这是什么意思?它首先从字符串后面开始搜索匹配项?

最后,$1 在replaceValue 中做什么?为什么是 $1 而不是空字符串? “”

最佳答案

1-我认为该问题的解决方案与您想要的解决方案不同:

该正则表达式将替换最后一个“&”,无论它位于字符串的中间还是末尾。

如果您将此正则表达式应用于这两个示例,您将看到第一个示例被“错误”替换:

height=74&width=12&test=1
height=74&width=12&test=1&

它们被替换为:

height=74&width=12test=1
height=74&width=12&test=1

因此,要真正替换最后一个“&”,您唯一需要做的就是:

string.replace(/&$/, '');
<小时/>

现在,如果您想替换最后一次出现的“&”,无论它在哪里,我将解释该正则表达式:

$1 代表一个(捕获组),([^&]*)内的所有内容都被捕获在 $1 内。这过于简单化了。

&([^&]*)$

& 将匹配文字“&”,然后在下面的捕获组中,此正则表达式将查找任意数量(0 到无限)的字符(不等于“&”,稍后解释),直到字符串或行的末尾(根据您在正则表达式中使用的标志, /m 用于匹配行 )。当您应用替换时,此捕获组中捕获的任何内容都将变为 1 美元。

所以,如果你在脑海中应用这个逻辑,你会发现它总是匹配最后一个 & 并将其替换为右侧不包含单个“&”的任何内容

&(<nothing-like-a-&>*)<until-we-reach-the-end> replaced by anything found inside (<nothing-like-a-&>*) == $1. In this case because of the use of * , it means 0 or more times, sometimes the capturing group $1 will be empty.

<小时/>

不等于部分: 正则表达式使用[^],简单来说[]代表一组独立的字符,例如:[ab]或[ba]代表相同,它总是会查找“a”或“b”。在此内部,您还可以查找 0 到 9 之类的范围,如 [0-9ba],它将始终匹配从 0 到 9、a 或 b 的任何内容。

这里的“^”[^]代表内容的否定,因此,它将匹配不属于该组的任何内容,就像[^0-9]将始终匹配任何不是数字的内容。在您的正则表达式 [^&] 中,它用于查找不是“&”的任何内容

关于javascript - 从字符串中删除最后一个字符实例 - Javascript - 重访,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57462846/

相关文章:

javascript - Google Maps API map 不显示

javascript - jQuery 如何拥有 $ 对象构造函数和与 $ 关联的方法?

REGEX - 从专有名称中提取 OU

python - 使用列表理解将字符串转换为字典

java - 将这些扫描仪导入到另一个类中?

javascript - 谷歌地图使用 lat/lng 从 ajax 成功返回的数据移动标记

javascript - 在 HTML/CSS/JS 中制作修复缩放时间线

正则表达式可选组选择不起作用

java - 需要正则表达式来匹配android 4.2.1及以上版本

swift - 如何在 Swift 中的英镑符号字符串中应用空格?