你能帮我么。如何(?<=^|\s):d(?=$|\s)
在 javascript RegExp 中添加此正则表达式?
例如
regex = new RegExp("?????" , 'g');
我想替换表情符号:d
,但前提是它被空格包围(或在字符串的末尾)。
你能帮我么。如何(?<=^|\s):d(?=$|\s)
在 javascript RegExp 中添加此正则表达式?
例如
regex = new RegExp("?????" , 'g');
我想替换表情符号:d
,但前提是它被空格包围(或在字符串的末尾)。
首先,正如 Some1.Kill.The.DJ 提到的,我建议您使用文字语法来创建正则表达式:
var pattern = /yourPatternHere/g;
它更短,更容易阅读,并且避免了转义序列的复杂性。
该模式不起作用的原因是JavaScript不支持lookbehinds ( (?<=...)
。所以你必须找到一个解决方法。你不会在你的模式中包含那个字符:
var pattern = /(?:^|\s):d(?!\S)/g;
因为无论如何在你的模式中捕获任何东西都没有用(因为:d
是固定的)你可能只对匹配的位置感兴趣。这意味着,当您找到匹配项时,您必须检查第一个字符是否是空格字符(或不是:
)。如果是这种情况,您必须将位置增加1
. 如果您知道您的输入字符串永远不能以空格开头,那么您可以简单地增加任何找到的位置(如果不是)0
。
请注意,我稍微简化了您的前瞻。这实际上是您不必区分字符串结尾和特定字符类型的环视之美。只需使用负前瞻,并确保前面没有非空格字符。
仅供将来参考,这意味着您可以将初始模式简化为:
(?<!\S):d(?!\S)
(如果您使用的正则表达式引擎支持lookbehinds。)
编辑:
在您对另一个答案发表评论后,使用该解决方法实际上要容易得多。只需写回捕获的空格字符:
string = string.replace(/(^|\s):d(?!\S)/g, "$1emoticonCode");
where$1
指的是匹配的内容(^|\s)
。即如果匹配是在字符串的开头$1
将是空的,并且如果之前有一个空格:d
,那么$1
将包含那个空格字符。
Javascript
不支持lookbehind
ie (?<=)
..
它支持lookahead
更好的使用
/(?:^|\s)(:d)(?=$|\s)/g
Group1
捕获所需的匹配