我有一个基本的字符串,并希望只在括号
之间获得特定的字符基本字符串:这是一个测试字符串[或多或少]
正则表达式:捕捉所有r和e的作品就好了。
(r|e)
=>这是 e st st r ing [mo re o r l e SS]
现在我想使用以下正则表达式并将其与我的正则表达式组合在一起,只在括号之间给出r和e,但遗憾的是这不起作用:
\[(r|e)\]
预期结果应为:mo re o r l e ss
有人可以解释一下吗?
编辑:问题与此问题非常相似:Regular Expression to find a string included between two characters while EXCLUDING the delimiters
但有区别的是,我不想在括号之间得到整个字符串。
跟进问题
base string = 'this is a link:/en/test/äpfel/öhr[MyLink_with_äöü] BREAK äöü is now allowed'
我需要一个正则表达式来查找非ascii字符äöü才能替换它们,但仅限于以link:...]
开头并以link:
字符结尾的]
子字符串
结果字符串如下所示:
result string = 'this is a link:/en/test/apfel/ohr[MyLink_with_aou] BREAK äöü is now allowed again'
评论中的解决方案中的正则表达式/[äöü]+(?=[^\]\[]*])/g
仅在两个括号之间传递äöü字符。
我知道正则表达式中有一个char列表的前瞻性前瞻,但我想知道为什么这个不起作用:
/link:([äöü]+(?=[^\]\[]*])/
感谢
答案 0 :(得分:0)
您可以使用以下解决方案:匹配link:
和]
之间的所有内容,并仅在替换回调方法内的匹配子字符串内替换您的字符:
var hashmap = {"ä":"a", "ö":"o", "ü":"u"};
var s = 'this is a link:/en/test/äpfel/öhr[MyLink_with_äöü] BREAK äöü is now allowed';
var res = s.replace(/\blink:[^\]]*/g, function(m) { // m = link:/en/test/äpfel/öhr[MyLink_with_äöü]
return m.replace(/[äöü]/g, function(n) { // n = ä, then ö, then ü,
return hashmap[n]; // each time replaced with the hashmap value
});
});
console.log(res);

模式详细信息:
\b
- 领先的单词边界link:
- 整个字link
,后面带有:
[^\]]*
- 除]
以外的零个或多个字符([^...]
是否定字符类,匹配任何字符/字符范围但是里面定义的那些)。另请参阅Efficiently replace all accented characters in a string?