Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 12 of 12

Thread: regExp

  1. #1
    Senior Coder
    Join Date
    Mar 2005
    Location
    Portsmouth UK
    Posts
    4,503
    Thanks
    3
    Thanked 500 Times in 487 Posts

    regExp

    if have a problem with a regExp I am using to identify phrases in an array

    Code:
     for (;z1<wary.length;z1++){
      reg=new RegExp('('+wary[z1][0]+')','gi');
      html=html.replace(reg,'<a>$1</a>');
     }
    however if I look for 'shop' it identifies the 'shop' in 'shopping'

    The rexExp needs to recognise word breaks but my my knowledge of regExp is very basic
    Vic

    God Loves You and will never love you less.

    http://www.vicsjavascripts.org/Home.htm

    If my post has been useful please donate to http://www.operationsmile.org.uk/

  • #2
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,918
    Thanks
    203
    Thanked 2,531 Times in 2,509 Posts
    The \b metacharacter is used to find a match at the beginning or end of a word. That is, use both to find whole words only.

    Code:
    var str = "Vic went shopping in a shop";
    str = str.replace (/\bshop\b/gi, "store");
    alert (str);

    "It ain't what you don't know that gets you into trouble. It's what you know for sure that just ain't so." - Mark Twain, US humorist, novelist, short story author, & wit (1835 - 1910)

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #3
    Senior Coder
    Join Date
    Mar 2005
    Location
    Portsmouth UK
    Posts
    4,503
    Thanks
    3
    Thanked 500 Times in 487 Posts
    yes I am OK with that but I need to include the word breaks
    with a RegExp

    Code:
      
    
    reg=new RegExp('('+wary[z1][0]+')','gi');
      html=html.replace(reg,'<a>$1</a>');
    Vic

    God Loves You and will never love you less.

    http://www.vicsjavascripts.org/Home.htm

    If my post has been useful please donate to http://www.operationsmile.org.uk/

  • #4
    Regular Coder
    Join Date
    Apr 2012
    Location
    St. Louis, MO
    Posts
    985
    Thanks
    7
    Thanked 101 Times in 101 Posts
    I think it would be
    Code:
    reg=new RegExp('(\b'+wary[z1][0]+'\b)','gi');
    ^_^

    If anyone knows of a website that can offer ColdFusion help that isn't controlled by neurotic, pedantic jerks* (stackoverflow.com), please PM me with a link.
    *
    The neurotic, pedantic jerks are not the owners; just the people who are in control of the "popularity contest".

  • #5
    Senior Coder
    Join Date
    Mar 2005
    Location
    Portsmouth UK
    Posts
    4,503
    Thanks
    3
    Thanked 500 Times in 487 Posts
    thank but I have tried that but it destroys the RegExp
    Vic

    God Loves You and will never love you less.

    http://www.vicsjavascripts.org/Home.htm

    If my post has been useful please donate to http://www.operationsmile.org.uk/

  • #6
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,918
    Thanks
    203
    Thanked 2,531 Times in 2,509 Posts
    What exactly is it you are trying to do?

    Have you tried

    reg=new RegExp("(\b'+wary[z1][0]+'\b)","gi");

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #7
    Regular Coder
    Join Date
    Apr 2012
    Location
    St. Louis, MO
    Posts
    985
    Thanks
    7
    Thanked 101 Times in 101 Posts
    Quote Originally Posted by Philip M View Post
    What exactly is it you are trying to do?

    Have you tried

    reg=new RegExp("(\b'+wary[z1][0]+'\b)","gi");
    Don't think this would work, as the apostrophes would be literals, not string delimiters. Unless I misunderstood?
    ^_^

    If anyone knows of a website that can offer ColdFusion help that isn't controlled by neurotic, pedantic jerks* (stackoverflow.com), please PM me with a link.
    *
    The neurotic, pedantic jerks are not the owners; just the people who are in control of the "popularity contest".

  • #8
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,918
    Thanks
    203
    Thanked 2,531 Times in 2,509 Posts
    Quote Originally Posted by WolfShade View Post
    Don't think this would work, as the apostrophes would be literals, not string delimiters. Unless I misunderstood?
    Hmm. Is Vic trying to match something like

    '('sometexthere')'

    Show us some examples, please Vic.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #9
    Senior Coder
    Join Date
    Mar 2005
    Location
    Portsmouth UK
    Posts
    4,503
    Thanks
    3
    Thanked 500 Times in 487 Posts
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    
    <head>
      <title></title>
    <style type="text/css">
    /*<![CDATA[*/
    
    .example {
      position:absolute;left:20px;top:20px;width:400px;height:420px;background-Color:white;border:solid red 1px;padding:5px;
    }
    
    .wordcls {
     color:#CC00FF;
    }
    
    .wordcls2 {
     color:green;font-Weight:bold;
    }
    
    
    /*]]>*/
    </style>
    <script type="text/javascript">
    /*<![CDATA[*/
    // Word Links (1-Febuary-2013)
    // by Vic Phillips http://www.vicsjavascripts.org.uk/
    
    
    /*
     Functional Code Size 0.793K
    */
    
    
    //****** Functional Code - NO NEED to Change.
    
    function zxcWordLinks(o){
     var obj=document.getElementById(o.ID)||document.body,html,ary,wary=o.WordArray,word,txt,cs=typeof(o.CaseSensitive)!='boolean'||!o.CaseSensitive?false:true,s,els,z0=0,z1=0,z2=0,z3=0,z3a;
     ary=obj.getElementsByTagName('A');
     for (;z0<ary.length;z0++){
      s=document.createElement('SPAN');
      s.className='ZXC';
      ary[z0].parentNode.insertBefore(s,ary[z0]);
      s.appendChild(ary[z0]);
     }
     html=obj.innerHTML.replace(/</g,'zxc')
     for (;z1<wary.length;z1++){
      reg=new RegExp('('+wary[z1][0]+')','gi');
      html=html.replace(reg,'<a>$1</a>');
     }
     html=html.replace(/zxc/g,'<');
     obj.innerHTML=html;
     els=obj.getElementsByTagName('SPAN');
     for (;z2<els.length;z2++){
      if (els[z2].className=='ZXC'){
       els[z2].innerHTML=els[z2].innerHTML.replace(/<a>/ig,'').replace(/<\/a>/ig,'')+'</a>'
      }
     }
     ary=obj.getElementsByTagName('A');
     for (;z3<wary.length;z3++){
      for (z3a=0;z3a<ary.length;z3a++){
       word=wary[z3][0];
       txt=ary[z3a].innerHTML;
       if (!cs){
        word=word.toLowerCase();
        txt=txt.toLowerCase();
       }
       a=ary[z3a];
       if (!a.href&&!a.href&&a.parentNode.className!='ZXC'&&trim(word)==trim(txt)&&typeof(wary[z3][2])=='string'){
        a.className=wary[z3][2];
        wary[z3][1]?a.href=wary[z3][1]:null;
        a.title=a.href
        s=document.createElement('SPAN');
        s.className='ZXC';
        a.parentNode.insertBefore(s,a);
        s.appendChild(a);
       }
      }
     }
    }
    
    function trim(string){
     return string.replace(/^\s+|\s+$/g,'');
    }
    
    
    
    /*]]>*/
    </script>
    
    <script type="text/javascript">
    /*<![CDATA[*/
    
    function Init(){
    
     zxcWordLinks({
      WordArray:[
       // field 0 = the phrase
       // field 1 = the link HREF
       // field 2 = the link class name
       ['defaults','http://www.webdeveloper.com/','wordcls'],
       ['tooltip','http://www.vicsjavascripts.org.uk/2','wordcls2'],
       ['Vics Javascripts','http://www.vicsjavascripts.org.uk/','wordcls'],
       ['Word Tool Tip','http://www.webdeveloper.com/','wordcls2'],
       ['shop','http://www.vicsjavascripts.org.uk/5','wordcls'],
       ['offsets','http://www.vicsjavascripts.org.uk/5','wordcls'],
       ['DIV in the HTML code','http://www.vicsjavascripts.org.uk/','wordcls2']
      ],
      ID:'Example1',
      CaseSensitive:true
     });
    
    
    }
    
    if (window.addEventListener){
     window.addEventListener('load',Init, false);
    }
    else if (window.attachEvent){
     window.attachEvent('onload',Init);
    }
    
    /*]]>*/
    </script>
    
    </head>
    
    <body>
     <div id="Example1" class="example" >
       Example 1 (ToopTip activated by 'mouseover')<br />
       <br />
      <p>
       Word Tool Tip<br />
       by Vic Phillips <a href="http://www.vicsjavascripts.org.uk/" >Vics Javascripts</a><br />
      <br />
      </p>
      <div>
       To display a tooltip popup on mouseover<br /> of a word or phrase.
       <br />
       shop and shopping
      </div>
      <hr />
      <p>
       Each word or phrase is defined in an array
       together with optional tooltip inner html, class names and offsets.
      </p>
      <a href="http://www.vicsjavascripts.org/" >Script defaults may be</a> used to define the tooltip offsets from the word or phase,
      the class name of the word or phrase, the class name of the tooltip,<br />
      if the words and phrases are case sensitive,<br />
      and the event type to display the tooltip.
      <hr />
      <div>
       Alternatively the tooltip may be a DIV in the HTML code.
      </div>
      <hr />
      <br />
      <br />
      The HTML may include nested elements and include inline elements<br />
      such as images <img src="http://www.vicsjavascripts.org.uk/StdImages/Egypt5.jpg" alt="Image" width="50" height="50" />
      and inputs <input name="" size="10" />.
     </div>
    
    
    </body>
    
    </html>
    the case in point is shop and shopping

    it is linking the shop in shopping which is not required
    Vic

    God Loves You and will never love you less.

    http://www.vicsjavascripts.org/Home.htm

    If my post has been useful please donate to http://www.operationsmile.org.uk/

  • #10
    Regular Coder
    Join Date
    May 2012
    Location
    France
    Posts
    224
    Thanks
    0
    Thanked 32 Times in 30 Posts
    Simply replace your regular expression with two back slashes \\b for the word boundaries \b
    Code:
      reg=new RegExp('(\\b'+wary[z1][0]+'\\b)','gi');
    A single back slash in a string announces a control character like \n or \t !
    Last edited by 007julien; 02-07-2013 at 04:40 PM.

  • #11
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    17,918
    Thanks
    203
    Thanked 2,531 Times in 2,509 Posts
    Quote Originally Posted by 007julien View Post
    Simply replace your regular expression with two back slashes \\b for the word boundaries \b
    Code:
      reg=new RegExp('(\\b'+wary[z1][0]+'\\b)','gi');
    A single back slash in a string announces a control character like \n or \t !
    As Old Pedant would say, DOH on me!!! I was confused by the single quote marks.

    All the code given in this post has been tested and is intended to address the question asked.
    Unless stated otherwise it is not just a demonstration.

  • #12
    Senior Coder
    Join Date
    Mar 2005
    Location
    Portsmouth UK
    Posts
    4,503
    Thanks
    3
    Thanked 500 Times in 487 Posts
    reg=new RegExp('(\\b'+wary[z1][0]+'\\b)','gi');
    that got it thank you
    Vic

    God Loves You and will never love you less.

    http://www.vicsjavascripts.org/Home.htm

    If my post has been useful please donate to http://www.operationsmile.org.uk/


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •