替换字符串值并使用javascript保留替换字符串的一部分

时间:2016-03-21 09:14:42

标签: javascript jquery regex replace

我有一个触及文本框,用户可以在其中设计一个html页面,我无法访问事件键盘也无法访问TextArea,所以我无法更改运行时用户输入数字的输入,所以我会最后得到一个包含各种html标签的vistext值,并且在vistext值中允许任何html标签,现在我想将用户在文本中输入的任何数字更改为word,意味着如果用户输入1我想要它是单词(一)和2,3,4 ..等,但同时我想保持在html标签中找到的数字,因为它没有任何变化,以保持用户对达到文本的样式他设计了,例如,如果我有以下生成的html:

<h1>Title1: Hi iam first title</h1><h3>Title3 hi iam third title</h3>
<div style='width:23px'>iam a div with 23 pixels width</div>

这只是一个示例,但用户可以构造任何html设计和样式和标记,因此输入可能不同,并且比此示例更复杂。 使用javascript我想将其更改为:

<h1>Titleone: Hi iam first title</h1><h3>Titlethree hi iam third title</h3>\
<div style='width:23px'>iam a div with twothree pixels width</div>
var oldValue = '<h1>Title1: Hi iam first title</h1><h3>Title3 hi iam third title</h3>
<div style='width:23px'>iam a div with 23 pixels width</div>';
var newValue = oldValue.replace(/1|2|3/g, function convertNumbers(x) {
    switch (x) {
        case '1':
            return 'one';
            break;
        case '2':
            return 'two';
            break;
        case '3':
            return 'three';
            break;
    }
});

但是此代码结果

<hone>Titleone: Hi iam first title</hone><hthree>Titlethree hi iam third title</hthree>
<div style='width:twothreepx'>iam a div with twothree pixels width</div>

我尝试使用RegularExpressions来替换any之间的字符串 (>)和(<)但不知道如何构造正则表达式, 请帮忙。 现在,我想指定一个模式,只替换html中的文本,不要更改html标签的样式或属性中的数字,在我看来,可以通过使用正则表达式查找模式来实现是'&gt;'的文字在左侧和'&lt;'在右侧,例如:

<h1>Title1: Hi iam first title</h1>

如果我通过获取包含'&gt;'的字符串来应用前一个字符串的模式在左边和'&lt;'在右边,我只会得到'Title1:嗨我第一个冠军'所以我将替换在这个结果字符串中找到的数字,以获得我想要的输出。 是否有可能,或者我必须重新考虑使用正则表达式并找到另一种方法来完成任务?

2 个答案:

答案 0 :(得分:4)

您可以使用jQuery text(function)方法更新元素的innerText。

// To store the string representation of the digits
var num = [undefined ,'one', 'two', 'three'];

// Iterate over all the `<h1>`, `<h3>`
$('h1, h3').text(function(i, text) {

    // Match 1, 2 or 3. Regex can also be written as `[123]` or `[1-3]`
    return text.replace(/1|2|3/g, function(number) {
        return num[number]; // Replace by the textual representation.
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<h1>Title1</h1><h3>Title3</h3>

答案 1 :(得分:0)

如果字符后面没有RegExp字符,您可以使用/(1|2|3)(?!>)/g 1来匹配23>

&#13;
&#13;
var oldValue = '<h1>Title1</h1><h3>Title3</h3>';
var newValue = oldValue.replace(/(1|2|3)(?!>)/g, function convertNumbers(x) {
  switch (x) {
    case '1':
      return 'one';
      break;
    case '2':
      return 'two';
      break;
    case '3':
      return 'three';
      break;
  }
});

document.write(newValue)
&#13;
&#13;
&#13;