![](/img/trans.png)
[英]Javascript: How to remove the last character from a div or a string?
[英]Remove Last Instance Of Character From String - Javascript - Revisited
根據這個問題的公認答案,以下是從字符串中刪除某個字符的最后一個實例的語法(在這種情況下,我想刪除最后一個&
):
function remove (string) { string = string.replace(/&([^&]*)$/, '$1'); return string; } console.log(remove("height=74&width=12&"));
但是我試圖完全理解它為什么起作用。
根據regex101.com,
/&([^&]*)$/
&
匹配字符&按字面意義(區分大小寫)第一捕獲組
([^&]*)
匹配[^&]*
下面的列表中不存在的單個字符
*
量詞-在零和無限制的時間之間進行匹配,並盡可能多地匹配,並根據需要返回(貪婪)
&
匹配字符&按字面意義(區分大小寫)
$
聲明位置在字符串末尾,或者在行終止符之前在字符串末尾(如果有)
因此,如果我們將字符&
從字面上與第一個&相匹配:
那為什么我們還要“匹配以下列表中不存在的單個字符”?
似乎適得其反。
然后,“ $
聲明字符串末尾的位置”-這是什么意思? 它首先從字符串的后面開始搜索匹配項嗎?
最后, $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(/&$/, '');
現在,如果您想替換“&”的最后一次出現,無論它在哪里,我都會解釋一下regex:
$ 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-9ba]這樣查找范圍為0到9的值,它將始終匹配0到9,a或b的任何值。
[^]此處的“ ^”表示內容的取反,因此,它將匹配該組中不存在的任何內容,例如[^ 0-9]將始終匹配不包含數字的任何內容。 在您的正則表達式[^&]中,它用於查找不是“&”的任何內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.