【发布时间】:2017-02-16 01:12:15
【问题描述】:
我有一个基本字符串,希望只在括号之间获取特定字符
基本字符串:这是一个测试字符串[或多或少]
正则表达式:捕获所有 r 和 e 的作品就好了。
(r|e)
=> 这是estring [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 = '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'
来自 cmets 解决方案的正则表达式 /[äöü]+(?=[^\]\[]*])/g 仅在两个括号之间传递 äöü 字符。
我知道在正则表达式中有一个带有字符列表的前瞻性,但我想知道为什么这个不起作用:
/link:([äöü]+(?=[^\]\[]*])/
谢谢
【问题讨论】:
-
定义“不起作用”。
-
"预期结果应该是:more or less"目前尚不清楚你的意思是什么。您是指一次调用
exec的结果吗?循环? -
它根本不匹配。我正在使用这个正则表达式来替换给定字符串的所有 r 和 e。第一个适用于整个字符串。但是第二个只能在括号之间替换是行不通的。使用 regex101.com 进行检查会得到:'您的正则表达式与主题字符串不匹配。'
-
由于在 JS 正则表达式中没有类似 PCRE 的
(*SKIP)(?!)也没有无限宽度的lookbehind 支持,您可以使用通常的hack -/[re]+(?=[^\][]*])/g。如果您需要更高的精度,请匹配/\[[^\][]*]/g,然后仅在匹配项中对es 和rs 执行您需要的操作。 -
您对 JS 中的正则表达式期望过高。别。如果没有详细说明您需要做什么,进一步聊天是没有意义的。
标签: javascript regex