鉴于以下案文:
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/)
感谢jvenema和Amarghosh的解决方案。同时也要向所有提供反馈的人提供反馈。
发布于 2010-06-02 13:32:37
var s = "This is!!xa simple string!xpattern";
s.replace(/[^!]!x/,'-');产出:
"This is!!xa simple strin-pattern"编辑:,我错过了g,我的错。这个方法很有效:
var s = "!xThis is!!xa simple string!xpattern";
s.replace(/(([^!])|^)!x/g,'$1-');产出:
"-This is!!xa simple string-pattern"我们所做的就是匹配前面的字符,然后将其包含回替换中。
发布于 2010-06-02 13:32:36
这个表达式应该可以完成这个任务。它使用否定的后面断言来断言只有一个感叹号。
(?<!!)!x发布于 2010-06-02 13:39:00
如果没有!x!x,您可以使用RegExp.exec而不是String.split,如
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可能发生,所以必须对循环进行一些修改,以避免无限循环。
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]);
}
reshttps://stackoverflow.com/questions/2958146
复制相似问题