10

Possible Duplicate:
Replace words in a string, but ignore HTML

Is it possible to ignore the HTML elements when calling Replace?

Sample code:

$myText.replace(new RegExp( $searchString, 'gi' ), 
    '<span class="highlight">'+ $searchString + '</span>');

$myText is a large string of HTML e.g.:

var $myText = 
    "<p>Lorem Ipsum is simply dummy text of the printing and typesetting " +
    "industry. Lorem Ipsum has been the industry's standard dummy text " +
    "ever since the 1500s, <img src="something">when an unknown printer " +
    "took a galley of type and scrambled it to make a type specimen book. " +
    "It has survived not only five centuries, " +
    "<a href="#" title="Lorem">but</a> also the leap into electronic " +
    "typesetting, remaining essentially unchanged. It was popularised in " +
    "the 1960s with the release of Letraset sheets containing Lorem Ipsum " +
    "passages, and more recently with desktop publishing software like " +
    "Aldus PageMaker including versions of Lorem Ipsum.</p>"

$searchString is equal to whatever a user types into an text input box.

If yes, how would I do it given the above sample code?

Community
  • 1
  • 1
The Guy
  • 115
  • 2
  • 7

2 Answers2

6

Yes, take a look at the following forum post:

http://forums.asp.net/t/1443955.aspx

The RegEx pattern you are looking for would be something similar to the following:

"(?<!<[^>]*)Jon Doe(?<![^>]*<)"

Basically, you're doing a search and replace on anything that lives outside brackets <>.

JavaScript:

phrase = phrase.replace(/"(?<!<[^>]*)Jon Doe(?<![^>]*<)" /i, "is not");
tambler
  • 3,009
  • 2
  • 23
  • 26
  • In jQuery terms, you would use the above RegEx expression in the following manner: phrase = phrase.replace(/"(?<!<[^>]*)Jon Doe(?<![^>]*<)" /i, "is not"); – tambler Feb 18 '10 at 15:24
  • but won't a stray > in the text mess everything up? or malformed html where they just use a

    in one instance and a

    text

    elsewhere?
    – CaffGeek Feb 18 '10 at 15:24
  • Nope. Your only ignoring content that is within a tag - don't ignore this – tambler Feb 18 '10 at 15:29
  • unless for some reason they decided to include html code as part of their text input. – jellyfishtree Feb 18 '10 at 15:38
  • I have tried it a few times keep getting an invalid quantifier ?<!<[^>]*)Jon Doe(?<![^>]*<)" error from Firebug. when using this: $myText.replace(/"(?<!<[^>]*)Jon Doe(?<![^>]*<)" /i, ''+ $searchString + ''); – The Guy Feb 18 '10 at 16:44
  • you are awesome brother save my day!!! – Jayakumar Kulkarni Oct 17 '18 at 07:22
1

Parsing HTML with a regular expression? This isn't a good idea. I would suggest inserting the HTML into the DOM and then traversing the nodes.

Community
  • 1
  • 1
Tim Down
  • 318,141
  • 75
  • 454
  • 536