http://jsfiddle.net/bxeLyneu/1/
function custom() {
var str = document.getElementById('original').innerHTML;
var replacement = str.replace(/\B:poop:\B/g,'REPLACED');
document.getElementById('replaced').innerHTML = replacement;
}
custom()
是=:poop:应该替换为“ REPLACED”
No =:poop:不应替换。换句话说,保持原样。
数字4、5、6似乎未遵循所提供的规则。我确实知道为什么,但是我不知道如何将多个表达式组合为一个。
我尝试了许多其他方法,但是我无法让它们按照我希望的方式工作。赔率对我不利。
是的,这与聊天框中的Facebook表情符号的工作原理非常相似。
新问题:
http://jsfiddle.net/xaekh8op/13/
/(^|\s):bin:(\s|$)/gm
它无法扫描并替换中间的一个。
我该如何解决?
最佳答案
\B
表示“任何位置都不在单词边界上”,而\s
表示“空白”。根据您给出的示例,以下代码可以完美运行。
function custom() {
var str = document.getElementById('original').innerHTML;
var replacement = str.replace(/([\s>]|^):poop:(?=[\s<]|$)/gm,'$1REPLACED');
document.getElementById('replaced').innerHTML = replacement;
}
custom()
http://jsfiddle.net/xaekh8op/15/
说明:
正则表达式
([\s>]|^):poop:(?=[\s<]|$)
代表以下内容:(在Debuggex中创建的图像)
通过在开头选择
\s
和>
之一(或使用^
表示行的开头),并将其分组为第1组,我们可以在以后使用它。在:poop:
之后(\s
或<
或行尾$
)类似。但是,第二次使用预查(语法是(?= ...)
)完成,该检查将检查[\s<]|$
部分是否在此之后,但在替换中不会消耗它。 <
和>
照顾可能在:poop:
旁边的所有HTML标记。替换字符串$1
中的$1REPLACED
将第一组放回原位,从而仅呈现:poop:
被REPLACED
替换。第二个“组”只是一个先行,因此不需要替换。有关单词边界的更多信息,可以参考http://www.regular-expressions.info/wordboundaries.html,其中表示:
有三个不同的位置可作为单词边界:
如果字符串中的第一个字符是单词字符,则在字符串中第一个字符之前。
如果字符串中的最后一个字符是单词字符,则在字符串的最后一个字符之后。
字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。