...

View Full Version : regex help please



nnichols
01-09-2004, 02:19 PM
I'm trying to write a regex to perform a bbcode replace for a live preview in an editor. I'm using the typical - string - formatting for the bbcode. I have tried the following as a basic example, but it did not work as I expected.


var re = /([b])(.*?)([\/b])/gis;
var newStr = newBrief.replace(re, '<b>$2</b>') ;

TIA

Nick

liorean
01-09-2004, 03:17 PM
1. Have a look at those flags. 's' is not a regex flag in JavaScript.
2. Remember that brackets [] are special characters. You need to escape them.

You could always have a look at my regex tutorial. Links are in my sig.

nnichols
01-12-2004, 06:11 PM
I have tried a few things and this is where I have got to -

function toggleEditorPreview()
{
if (document.getElementById('previewPane').style.display == 'none')
{
var previewPane = document.getElementById('previewPane');
var newBrief = document.getElementById('largeBriefs').value;

var re = /(\[b\])(.*?)(\[\/b\])/gi;
var newStr = newBrief.replace(re, '<b>$2</b>') ;

re = /(\[i\])(.*?)(\[\/i\])/gi;
newStr = newStr.replace(re, '<i>$2</i>') ;

re = /(\[u\])(.*?)(\[\/u\])/gi;
newStr = newStr.replace(re, '<u>$2</u>') ;

re = /(\[t\])/gi;
newStr = newStr.replace(re, '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;') ;

re = /(\[pb\])/gi;
newStr = newStr.replace(re, '<hr style="page-break-before:always;" />') ;

re = new RegExp("(\n)", "gi");
newStr = newStr.replace(re, '<br />') ;

previewPane.innerHTML = newStr;
document.getElementById('editorPane').style.display = 'none';
document.getElementById('previewPane').style.display = 'block';
}
else
{
document.getElementById('previewPane').style.display = 'none';
document.getElementById('editorPane').style.display = 'block';
}
}

This works fine in all of our test browsers, except for IE5 on Mac OS9.2 and IE5.2 on Mac OSX. I have searched around the net trying to find a solution, but not got very far.

Any suggestions would be very much appreciated.

TIA
Nick

liorean
01-12-2004, 06:44 PM
Non-greedy quantifiers were introduced with the JScript 5.5 engine on windows - ie5.5w, that is. The ie5m JScript engine is the same as the engine in ie5.0w. May that be the problem source?

nnichols
01-13-2004, 11:52 AM
Thank you. Have got it working, though not quite as desired - the joys of having to accommodate IE5M users.

Thanks again

brothercake
01-13-2004, 12:34 PM
Incidentally (might be relevant) mac/ie5 has some fairly serious issues with regular expression handling:

- IE5.0 (for OS9 or earlier) doesn't properly garbage collect the RegExp constructor, so if you're iterating more than a few times you may get an "out of memory" error; you can avoid that by using a regex literal:


if( /[pattern]/i.test(refToString) ) ...

- MSN for OSX has either a memory leak, or possibly over-zealous error handling - if you try to test() an empty string it abandons the script with another "out of memory" error; so for safety:


if(refToString && /[pattern]/i.test(refToString) ) ...



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum