簡體   English   中英

努力使用正則表達式來匹配一個字符的兩個,而不是三個

[英]Struggling with regex to match only two of a character, not three

我需要在Javascript正則表達式的字符串中匹配所有出現的//

它不能匹配 /// 或 /

到目前為止,我有(.*[^\/])\/{2}([^\/].*)

這基本上是“不是/的東西,然后是//,然后是不是/的東西”

除了我要匹配的字符串以//開頭時,該方法似乎還有效

這不起作用:

//例子

這確實

東西 // 例子

我該如何解決這個問題?

編輯:更多的上下文 - 我試圖用!替換//,所以我正在使用:

result = result.replace(myRegex, "$1 ! $2");

替換兩個斜杠,它們要么開始字符串,要么不跟在斜杠后面后面跟任何不是斜杠或字符串結尾的斜杠。

s=s.replace(/(^|[^/])\/{2}([^/]|$)/g,'$1!$2');

用這個:

/([^/]*)(\/{2})([^/]*)/g

例如

alert("///exam//ple".replace(/([^/]*)(\/{2})([^/]*)/g, "$1$3"));  

編輯:根據評論更新了表達式。

/[/]{2}/

例如:

alert("//example".replace(/[/]{2}/, ""));  

例如,它看起來也不起作用example//

問題是因為您匹配//前后至少有一個非斜杠字符。 這可以通過錨定正則表達式來解決,然后您可以將前面/后面的文本設為可選:

^(.*[^\/])?\/{2}([^\/].*)?$

使用否定的前瞻/后瞻斷言:

(.*)(?<!/)//(?!/)(.*)

這是一個窮人的非正則表達式方法:

  1. 用永遠不會自然發生的東西臨時替換三個連續的字符——在處理用戶輸入的值時非常重要。
  2. 使用 .replaceAll() 替換剩余的兩個連續字符。
  3. 返回原來的三個連續字符。

例如,假設您想刪除“..”的所有實例而不影響“...”的出現。

var cleansedText = $(this).text().toString()
    .replaceAll("...", "☰☸☧")
    .replaceAll("..", "")
    .replaceAll("☰☸☧", "...")
; 
$(this).text(cleansedText();

對於較長的字符串,可能不如正則表達式快,但對於短字符串來說效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM