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

标签 javascript regex

我有一个基本字符串,并且只想获取括号之间的特定字符

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

正则表达式:捕获所有 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/

相关文章:

javascript - 按 child 的 child 对数组进行排序

javascript - Javascript 中简单嵌套 for 循环的问题

javascript - 当特定的 ajax 请求完成时做某事

javascript - 在 Babylon.js 中移动网格的问题

php - 正则表达式 php 和文本文件

java - 仅在点之后替换括号

java - 固定格式正则表达式 : [aaa-aaaa]

JavaScript 正则表达式解析 Latex\frac

javascript - 固定 div 页面滚动后闪烁

正则表达式与 Python 3 匹配以下划线开头和结尾的单词