正则表达式匹配分隔符之间的特殊字符

时间:2016-10-07 06:00:21

标签: javascript regex

我有一个基本的字符串,并希望只在括号

之间获得特定的字符

基本字符串:这是一个测试字符串[或多或少]

正则表达式:捕捉所有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:([äöü]+(?=[^\]\[]*])/

感谢

1 个答案:

答案 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?