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()
是=:大便:应替换为"更换" 否=:大便:不应该被替换。换句话说,保持不变。
第4,5,6号似乎不遵循所提供的规则。我知道为什么,但我不知道如何将多个表达式合并为一个。 我尝试了很多其他的但是我不能让它们像我希望的那样工作。赔率不利于我。
是的,这与Facebook聊天框中的表情符号非常相似。
新问题:
http://jsfiddle.net/xaekh8op/13/
/(^|\s):bin:(\s|$)/gm
无法扫描并替换中间的那个。 我该如何解决这个问题?
答案 0 :(得分:4)
\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,其中包含:
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。