我有一个基本字符串,并且只想获取括号之间的特定字符
基本字符串:这是一个测试字符串[或多或少]
正则表达式:捕获所有 r 和 e 的效果很好。
(r|e)
=> 这是第一个事件[more or l ess]
现在我想使用以下正则表达式并将其与我的正则表达式分组,以便在括号之间仅给出 r 和 e,但不幸的是这不起作用:
\[(r|e)\]
预期结果应该是:more or less
谁能解释一下吗?
编辑:问题与此非常相似:Regular Expression to find a string included between two characters while EXCLUDING the delimiters
但不同的是,我不想得到括号之间的整个字符串。
跟进问题
base string = '这是一个链接:/en/test/äpfel/öhr[MyLink_with_äöü] BREAK äöü 现在已允许'
我需要一个正则表达式来查找非 ascii 字符 äöü 以便替换它们,但仅限于以单词 link:
开头的 link:...]
子字符串中code> 并以 ]
字符结尾。
结果字符串将如下所示:
结果字符串 = '这是一个链接:/en/test/apfel/ohr[MyLink_with_aou] BREAK äöü 现在再次被允许'
注释中解决方案中的正则表达式 /[äöü]+(?=[^\]\[]*])/g
仅在两个括号之间提供 äöü 字符。
我知道正则表达式中有一个带有字符列表的前向查找,但我想知道为什么这个不起作用:
/link:([äöü]+(?=[^\]\[]*])/
谢谢
最佳答案
您可以使用以下解决方案:匹配 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?
关于javascript - 正则表达式匹配分隔符之间的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910417/