admin管理员组文章数量:1435859
I need to match all occurrences of // in a string in a Javascript regex
It can't match /// or /
So far I have (.*[^\/])\/{2}([^\/].*)
which is basically "something that isn't /, followed by // followed by something that isn't /"
The approach seems to work apart from when the string I want to match starts with //
This doesn't work:
//example
This does
stuff // example
How do I solve this problem?
Edit: A bit more context - I am trying to replace // with !, so I am then using:
result = result.replace(myRegex, "$1 ! $2");
I need to match all occurrences of // in a string in a Javascript regex
It can't match /// or /
So far I have (.*[^\/])\/{2}([^\/].*)
which is basically "something that isn't /, followed by // followed by something that isn't /"
The approach seems to work apart from when the string I want to match starts with //
This doesn't work:
//example
This does
stuff // example
How do I solve this problem?
Edit: A bit more context - I am trying to replace // with !, so I am then using:
result = result.replace(myRegex, "$1 ! $2");
Share
Improve this question
asked Jan 5, 2011 at 21:05
Fiona - myaccessible.websiteFiona - myaccessible.website
14.9k17 gold badges84 silver badges118 bronze badges
5
-
2
Do you only need to match
//
or also the text around it? – Felix Kling Commented Jan 5, 2011 at 21:07 - I'm trying to replace all occurrences of // with ! – Fiona - myaccessible.website Commented Jan 5, 2011 at 21:20
-
For simple string operations you should use simple string operations like
String.replace
, not regexes. Matching a (or two) chars qualifies as a simple string operation. – nikc Commented Jan 5, 2011 at 21:23 -
@nikc: He is using
String.replace
. How would you specify to replace only//
but not e.g.///
without regex? – Felix Kling Commented Jan 5, 2011 at 21:25 -
@Felix: ah, my bad, too much whisky. Missed that
///
(and friends) should be ignored. – nikc Commented Jan 5, 2011 at 21:28
5 Answers
Reset to default 6Replace two slashes that either begin the string or do not follow a slash, and are followed by anything not a slash or the end of the string.
s=s.replace(/(^|[^/])\/{2}([^/]|$)/g,'$1!$2');
It looks like it wouldn't work for example//
either.
The problem is because you're matching //
preceded and followed by at least one non-slash character. This can be solved by anchoring the regex, and then you can make the preceding/following text optional:
^(.*[^\/])?\/{2}([^\/].*)?$
Use negative lookahead/lookbehind assertions:
(.*)(?<!/)//(?!/)(.*)
Use this:
/([^/]*)(\/{2})([^/]*)/g
e.g.
alert("///exam//ple".replace(/([^/]*)(\/{2})([^/]*)/g, "$1$3"));
EDIT: Updated the expression as per the ment.
/[/]{2}/
e.g:
alert("//example".replace(/[/]{2}/, ""));
This does not answer the OP's question about using regex, but since some of the original ments suggested using .replaceAll, since not everyone who reads the question in the future wants to use regex, since people might mistakenly assume that regex is the only alternative, and since these details cannot be acmodated by submitting a ment, here's a poor man's non-regex approach:
- Temporarily replace the three contiguous characters with something that would never naturally occur — really important when dealing with user-entered values.
- Replace the remaining two contiguous characters using .replaceAll().
- Return the original three contiguous characters.
For instance, let's say you wanted to remove all instances of ".." without affecting occurrences of "...".
var cleansedText = $(this).text().toString()
.replaceAll("...", "☰☸☧")
.replaceAll("..", "")
.replaceAll("☰☸☧", "...")
;
$(this).text(cleansedText);
Perhaps not as fast as regex for longer strings, but works great for short ones.
本文标签: javascriptStruggling with regex to match only two of a characternot threeStack Overflow
版权声明:本文标题:javascript - Struggling with regex to match only two of a character, not three - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744495328a2608988.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论