我有一个像这样的字符串:
"Size: 40; Color: 30"

我想为他们创建工具提示,使其看起来像这样:

<span class='tooltip' data-tooltip='The Size of a Unit is controlled by the Color of the Unit.'>Size</span>: 40; <span class='tooltip' data-tooltip='The Color of a Unit is a standard Setting.'>Color</span>: 30

然而,使用天真的替换,我最终得到这个:

<span class='tooltip' data-tooltip='The Size of a Unit is controlled by the <span class='tooltip' data-tooltip='The Color of a Unit is a standard Setting.'>Color</span> of the Unit.'>Size</span>: 40; <span class='tooltip' data-tooltip='The Color of a Unit is a standard Setting.'>Color</span>: 30

这不是我想要的.如何编写正则表达式或进行替换以使其不替换已经属于工具提示的文本?

编辑:我没有说明替换不是尺寸和颜色,它们只是示例.我正在添加任意数量,通常是20个工具提示到任何字符串.

以下是一些可测试的:

var tooltips = {
  "Size":"The Size of a Unit is controlled by the Color","Color": "bar","Time and Size": "foo"
}

"Here we have something of <b>Size</b> 20 and Color red. it's very important that the Time and Size of the work and kept in sync."

应该导致:

"Here we have something of <b><span class='tooltip' data-tooltip='The Size of a Unit is controlled by the Color'>Size<span></b> 20 and <span class='tooltip' data-tooltip='bar'>Color<span> red. it's very important that the <span class='tooltip' data-tooltip='foo'>Time and Size<span> of the work and kept in sync."

较长的匹配应优先于较短的匹配.它应该只匹配整个单词而不是单词的一部分.

编辑:忘了陈述另一个要求.

它仍应匹配用非工具提示的标签包装的字符串.

解决方法

我认为如果获得正确的正则表达式模式,单个str.replace将完成工作.
function replacetooltips(str,tooltips) {

    //copy from https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
    function escapeRegExp(string) {

        return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1");
    }

    var keys = [];
    for ( var k in tooltips) {
        keys.push(escapeRegExp(k));
    }

    //create a regexp like (Size)|(Color)|(Time and Size)
    var ptn = new RegExp('(' + keys.join(')|(') + ')','g');

    str = str.replace(ptn,function(mat) {

        if (!tooltips[mat]) {
            return mat;
        }

        return '<span class="tooltip" data-tooltip="' + tooltips[mat].replace(/"/g,'&quot;') + '">' + mat + '</span>';
    });

    return str;

}

http://jsfiddle.net/rooseve/6wRUF/

javascript为部分字符串创建工具提示,该字符串尚未在工具提示下的更多相关文章

  1. Android和Eclipse 2同一个应用程序的不同版本

    你好我是一个开始Android开发人员使用Windows和eclipseIDE开发javaandroid应用程序.我已经发布了一个游戏,但有一个免费版本的游戏和付费版本.谷歌市场坚持认为不同的版本必须有不同的包名.到目前为止,我一直在使用2个不同的名称重构包,并在每次构建不同版本时更改R资源文件导入.两个版本的代码都是99%相同.有更好的方法吗?

  2. android – 视图寻呼机片段中的子片段在交换后消失

    所以这是一个复杂的问题,但我会尽量让它变得容易.首先,我有一个带有视图寻呼机的主要活动.其中有2个页面,每个页面都有2个操作栏标签.我还有一个抽屉有4个选项,前两个是视图寻呼机中的2个页面,第二个是不是的页面.如果您选择第二个中的一个,我将我的ViewPager配置为用另外两个片段交换片段.所有这些片段都是单例,因此来回切换不会导致任何内存问题.在切换到第二组片段时,其中一个片段中有一个框架,用于

  3. JS正则表达式替换字符串replace()方法实例代码

    正则表达式是用于匹配字符串中字符组合的模式,在js中正则表达式是对象,这篇文章主要给大家介绍了关于JS正则表达式替换字符串replace()方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  4. python如何使用replace做多字符替换

    这篇文章主要介绍了python如何使用replace做多字符替换,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. Javascript中replace方法与正则表达式的结合使用教程

    replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法,下面这篇文章主要给大家介绍了关于Javascript中replace方法与正则表达式的结合使用的相关资料,需要的朋友可以参考下

  6. 关于JavaScript中string 的replace

    在使用JavaScript对字符串进行处理的时候我们经常会用到replace方法,很简单的一个方法,以前一直不以为意,直到今天看JavaScript语言精粹的时候读到了一个有趣的小例子的时候,并不是十分理解,了解了一下replace的用法才明白,原来replace不像想象中的那么简单

  7. 详解PHP字符串替换str_replace()函数四种用法

    str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。本文重点给大家介绍PHP字符串替换str_replace()函数四种用法,感兴趣的朋友一起看看吧

  8. 初学JS的的小例子 javascript replace高亮替换

    JS实现关键字高亮显示a曾经有一份真挚的爱情拜在我面前,明明我却睡着了……

  9. JavaScript replace(rgExp,fn)正则替换的用法

    再看jQuery源码的时候遇到了replace中参数为函数的用法,正好复习一下replace正则替换的用法。

  10. JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)

    这篇文章主要介绍了JavaScript字符串对象replace方法实例,replace方法用于字符串替换,同时支持正则表达式替换,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部