首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配!x但不是!!x在JS regex?

如何匹配!x但不是!!x在JS regex?
EN

Stack Overflow用户
提问于 2010-06-02 13:30:41
回答 3查看 1.3K关注 0票数 2

鉴于以下案文:

This is!!xa simple string!xpattern

我想要一个与“字符串”和“模式”之间的!x匹配的regexp,而不是介于"is“和"a”之间的!!xa

这个regexp将在字符串split()中使用。

我已经尝试过几个组合,但我无法获得一个能满足我需求的regexp。也许我的表情并不那么有规律

提前感谢!

编辑:

溶液

为了说明清楚,解决办法将是:

s.replace(/(([^!])|^)!x/g,'$1SOME_MAGICAL_STRING').split(/SOME_MAGICAL_STRING/)

感谢jvenemaAmarghosh的解决方案。同时也要向所有提供反馈的人提供反馈。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-02 13:32:37

代码语言:javascript
复制
var s = "This is!!xa simple string!xpattern";
s.replace(/[^!]!x/,'-');

产出:

代码语言:javascript
复制
"This is!!xa simple strin-pattern"

编辑:,我错过了g,我的错。这个方法很有效:

代码语言:javascript
复制
var s = "!xThis is!!xa simple string!xpattern";
s.replace(/(([^!])|^)!x/g,'$1-');

产出:

代码语言:javascript
复制
"-This is!!xa simple string-pattern"

我们所做的就是匹配前面的字符,然后将其包含回替换中。

票数 -1
EN

Stack Overflow用户

发布于 2010-06-02 13:32:36

这个表达式应该可以完成这个任务。它使用否定的后面断言来断言只有一个感叹号。

代码语言:javascript
复制
(?<!!)!x
票数 -1
EN

Stack Overflow用户

发布于 2010-06-02 13:39:00

如果没有!x!x,您可以使用RegExp.exec而不是String.split,如

代码语言:javascript
复制
rx = /((?:[^!]|![^x])+)(?:!x|$)/g
res = []
while ((m = rx.exec("This is!!xa simple string!xpattern")))
  res.push(m[1]);

在这里,(?:[^!]|![^x])+匹配一个或多个非感叹号,或者一个!后面没有一个x。后一种情况消除了!!(?:!x|$)使用!x终止符。

编辑:由于!x!x可能发生,所以必须对循环进行一些修改,以避免无限循环。

代码语言:javascript
复制
rx = /((?:[^!]|![^x])*)(?:!x|$)/g
res = []
str = "This is!!xa simpl!!xe!x!x string!xpattern"
while (true) {
  var m = rx.exec(str);
  if (m.index >= str.length)
    break;
  res.push(m[1]);
}
res
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2958146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档