例如,我有一个字符串<i class='highlight'>L</i>olopolo
。我需要将字母l
更改为<i class='highlight'>l</i>
。如何使正则表达式忽略标签及其中的所有内容?
答案 0 :(得分:1)
试试这个:
var string = "<i class='highlight'>L</i>olopolo";
string = string.replace(/l(?![^>]+>)(?![^<]*<\/)/g, "<i class='highlight'>l</i>");
alert(string);
如果您想拥有任意文本,那么您可以使用以下代码:
var text = "foo";
var re = new RegExp(text + '(?![^>]+>)(?![^<]*</)', 'g');
var string = "<i class='highlight'>foobar</i>foobarfoobar";
string = string.replace(re, "<i class='highlight'>" + text + "</i>");
alert(string);
答案 1 :(得分:1)
如前所述,使用正则表达式并不是最好的主意,所以接下来最好的事情是循环文本节点并添加元素。
var charSplit = "l";
var elem = document.querySelector(".x");
var nodes = elem.childNodes;
for(var i=nodes.length-1;i>=0;i--){
var node = nodes[i];
if(node.nodeType === 3) { //this is a text node
var last = node;
var parts = node.nodeValue.split(charSplit); //split of the character we are supposed to match
node.nodeValue = parts[parts.length-1]; //set text node value to last index's value
for (var j=parts.length-2; j>=0;j--){ //loop backwards ingnoring the last index since we already put that text in the textode
var it = document.createElement("i"); //create the new element to add
it.className="highligt";
it.innerHTML = charSplit;
node.parentNode.insertBefore(it,last); //add it before the text node
var tx = document.createTextNode(parts[j]); //create new text node for text that becomes before the element
node.parentNode.insertBefore(tx,it);
last = tx;
}
}
}
&#13;
<p class="x"><i class='highlight'>L</i>olopolo</p>
&#13;
答案 2 :(得分:1)
我会建议像这样的东西,使用最少(而不是那么复杂)的正则表达式。如果你的字符串最初是html的一部分 - &gt;你可以得到父母,并改变textContent和innerHTML:
import math
n = math.sqrt(int(raw_input("Enter a number\n")))
print n
演示:http://jsfiddle.net/LzbkhLx7/
P.S。解释 - textContent将为您提供'纯'字符串/文本,没有HTML标记 - 然后您可以轻松地包装每次出现的l / L.
答案 3 :(得分:-1)
import javax.swing.*;
public class MyLargeTextArea extends JPanel {
private static final int ROWS = 20;
private static final int COLS = 40;
private JTextArea textArea = new JTextArea(ROWS, COLS);
public MyLargeTextArea() {
textArea.setText("This is a small amount of text");
// so lines wrap
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
add(new JScrollPane(textArea));
}
private static void createAndShowGui() {
MyLargeTextArea mainPanel = new MyLargeTextArea();
JFrame frame = new JFrame("MyLargeTextArea");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
不需要正则表达式。
或者如果您想将字母从大写更改为小写
document.getElementsByClassName("highlight")[0].innerHTML = "l";
当然,你必须确保在执行之前可以在innerHTML上调用toLowerCase(或其他方法)。