Go Back   CodingForums.com > :: Client side development > JavaScript programming

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 02-06-2013, 05:18 PM   PM User | #1
vwphillips
Senior Coder

 
Join Date: Mar 2005
Location: Portsmouth UK
Posts: 4,378
Thanks: 3
Thanked 466 Times in 453 Posts
vwphillips is a jewel in the roughvwphillips is a jewel in the roughvwphillips is a jewel in the rough
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.uk/

If my post has been useful please donate to http://www.operationsmile.org.uk/
vwphillips is offline   Reply With Quote
Old 02-06-2013, 05:28 PM   PM User | #2
Philip M
Supreme Master coder!

 
Philip M's Avatar
 
Join Date: Jun 2002
Location: London, England
Posts: 17,098
Thanks: 197
Thanked 2,421 Times in 2,399 Posts
Philip M has a spectacular aura aboutPhilip M has a spectacular aura aboutPhilip M has a spectacular aura about
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.
Philip M is offline   Reply With Quote
Old 02-06-2013, 08:37 PM   PM User | #3
vwphillips
Senior Coder

 
Join Date: Mar 2005
Location: Portsmouth UK
Posts: 4,378
Thanks: 3
Thanked 466 Times in 453 Posts
vwphillips is a jewel in the roughvwphillips is a jewel in the roughvwphillips is a jewel in the rough
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.uk/

If my post has been useful please donate to http://www.operationsmile.org.uk/
vwphillips is offline   Reply With Quote
Old 02-06-2013, 08:39 PM   PM User | #4
WolfShade
Regular Coder

 
Join Date: Apr 2012
Location: St. Louis, MO, USA
Posts: 960
Thanks: 7
Thanked 100 Times in 100 Posts
WolfShade is an unknown quantity at this point
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".
WolfShade is offline   Reply With Quote
Old 02-07-2013, 12:40 PM   PM User | #5
vwphillips
Senior Coder

 
Join Date: Mar 2005
Location: Portsmouth UK
Posts: 4,378
Thanks: 3
Thanked 466 Times in 453 Posts
vwphillips is a jewel in the roughvwphillips is a jewel in the roughvwphillips is a jewel in the rough
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.uk/

If my post has been useful please donate to http://www.operationsmile.org.uk/
vwphillips is offline   Reply With Quote
Old 02-07-2013, 03:30 PM   PM User | #6
Philip M
Supreme Master coder!

 
Philip M's Avatar
 
Join Date: Jun 2002
Location: London, England
Posts: 17,098
Thanks: 197
Thanked 2,421 Times in 2,399 Posts
Philip M has a spectacular aura aboutPhilip M has a spectacular aura aboutPhilip M has a spectacular aura about
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.
Philip M is offline   Reply With Quote
Old 02-07-2013, 03:45 PM   PM User | #7
WolfShade
Regular Coder

 
Join Date: Apr 2012
Location: St. Louis, MO, USA
Posts: 960
Thanks: 7
Thanked 100 Times in 100 Posts
WolfShade is an unknown quantity at this point
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".
WolfShade is offline   Reply With Quote
Old 02-07-2013, 03:56 PM   PM User | #8
Philip M
Supreme Master coder!

 
Philip M's Avatar
 
Join Date: Jun 2002
Location: London, England
Posts: 17,098
Thanks: 197
Thanked 2,421 Times in 2,399 Posts
Philip M has a spectacular aura aboutPhilip M has a spectacular aura aboutPhilip M has a spectacular aura about
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.
Philip M is offline   Reply With Quote
Old 02-07-2013, 04:08 PM   PM User | #9
vwphillips
Senior Coder

 
Join Date: Mar 2005
Location: Portsmouth UK
Posts: 4,378
Thanks: 3
Thanked 466 Times in 453 Posts
vwphillips is a jewel in the roughvwphillips is a jewel in the roughvwphillips is a jewel in the rough
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.uk/

If my post has been useful please donate to http://www.operationsmile.org.uk/
vwphillips is offline   Reply With Quote
Old 02-07-2013, 04:36 PM   PM User | #10
007julien
Regular Coder

 
Join Date: May 2012
Location: France
Posts: 121
Thanks: 0
Thanked 18 Times in 16 Posts
007julien is an unknown quantity at this point
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..
007julien is offline   Reply With Quote
Old 02-07-2013, 07:17 PM   PM User | #11
Philip M
Supreme Master coder!

 
Philip M's Avatar
 
Join Date: Jun 2002
Location: London, England
Posts: 17,098
Thanks: 197
Thanked 2,421 Times in 2,399 Posts
Philip M has a spectacular aura aboutPhilip M has a spectacular aura aboutPhilip M has a spectacular aura about
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.
Philip M is offline   Reply With Quote
Old 02-08-2013, 11:07 AM   PM User | #12
vwphillips
Senior Coder

 
Join Date: Mar 2005
Location: Portsmouth UK
Posts: 4,378
Thanks: 3
Thanked 466 Times in 453 Posts
vwphillips is a jewel in the roughvwphillips is a jewel in the roughvwphillips is a jewel in the rough
Quote:
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.uk/

If my post has been useful please donate to http://www.operationsmile.org.uk/
vwphillips is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 06:20 AM.


Advertisement
Log in to turn off these ads.