苦苦挣扎与正则表达式只匹配一个字符中的两个,而不是三个

时间:2011-01-05 21:05:30

标签: javascript regex

我需要匹配Javascript正则表达式

中字符串中所有出现的//

无法匹配///或/

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

这基本上是“不是/的东西,后跟//后跟不是/”

的东西

这种方法似乎与我想要匹配的字符串以//

开头的方式不同

这不起作用:

  

//示例

这样做

  

stuff // example

如何解决这个问题?

编辑:更多上下文 - 我试图用!替换//,所以我正在使用:

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

4 个答案:

答案 0 :(得分:5)

替换 开始字符串或不遵循斜杠的两个斜杠,  之后是任何不是斜杠或字符串结尾的东西。

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

答案 1 :(得分:0)

使用此:

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

e.g。

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

编辑:根据评论更新了表达式。

/ [/] {2} /

e.g:

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

答案 2 :(得分:0)

看起来它对example//也不起作用。

问题是因为您匹配//前后至少有一个非斜杠字符。这可以通过锚定正则表达式来解决,然后您可以使前/后文本可选:

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

答案 3 :(得分:0)

使用negative lookahead/lookbehind断言:

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