Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:如何使用包含唯一id的span标记将每个单词包装成字符串?_Javascript_Replace - Fatal编程技术网

JavaScript:如何使用包含唯一id的span标记将每个单词包装成字符串?

JavaScript:如何使用包含唯一id的span标记将每个单词包装成字符串?,javascript,replace,Javascript,Replace,使用Javascript,我希望获取字符串的内容,并用一组标记将每个单词包装起来。每个span标记将有一个我将生成的唯一ID属性。如果一个单词已经包含在一个带有id的span标记中,请不要管它。如果它有一个没有id的span标记,我需要在span中添加一个id 因此,以下是: this is <b>a</b> <span>bunch</span> of <span id="aopksd"><i>text</i>&

使用Javascript,我希望获取字符串的内容,并用一组
标记将每个单词包装起来。每个span标记将有一个我将生成的唯一ID属性。如果一个单词已经包含在一个带有id的span标记中,请不要管它。如果它有一个没有id的span标记,我需要在span中添加一个id

因此,以下是:

this is <b>a</b> <span>bunch</span> of <span id="aopksd"><i>text</i></span>
这是一堆文本
变成:

<span id="dwdkwkd">this</span> <span id="zdkdokw">is</span> <span id="rrrsass"><b>a</b></span> <span id="lwokdw">bunch</span> <span id="poeokf">of</span> <span id="aopksd"><i>text</i></span>
这是一堆文本
关于实现这一目标的最佳方法的想法?我正在node.js中的服务器端执行此操作。我更喜欢非jquery方法

编辑:
id是我将在服务器上生成的。我现在只是使用了占位符假ID。我将使用我自己的全局唯一id。

您可以尝试此操作,但如果您想对html标记中已有的单词进行特殊处理,则可能必须检查参数a:

var str = "Bonjour, je m'appelle Francis et je suis le plus bel homme du monde​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";
var regex = /\S+/g;

var id = 0;

var result = str.replace(regex, function(a) {
    return "<span id=" + (++id) + ">" + a + "</span>";
});​​​​​​​​​​

alert(result);
var str=“你好,我是弗朗西斯,我是世界上最好的朋友。”​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";
var regex=/\S+/g;
var-id=0;
var result=str.replace(正则表达式,函数(a){
返回“+a+”;
});​​​​​​​​​​
警报(结果);
现场演示:

编辑:如果不想覆盖现有ID,可以尝试此操作

var str = "Bonjour, je m'appelle <b>Francis</b> et <span id=\"existing\">je</span> suis le plus bel homme du monde";
var regex = /(<.+?<\/.+?>|\S+)/g;

var id = 0;

var result = str.replace(regex, function(a) {

    var m = (/<(\w+)([^>]*)>([^<]*)<\/\w+>/).exec(a);

    if (m !== null && m[1] === "span" && m[2].test(/id=/)) 
        return a;

    return "<span id=" + (++id) + ">" + a + "</span>";
});

console.log(result);
var str=“你好,我是弗朗西斯,我是世界上最好的人”;

var regex=/([^你将如何获得id?@jcolebrand查看我对idI的编辑我不认为你可以拥有数字id。我不知道为什么我会这样想。但是,如果他想让他们拥有“更多匿名id”“总是有这样一种想法,即用另一个值将它们合并,然后运行SHA或MD5或其他哈希运算,只得到最后6或8个位置。@jcolebrand在这种情况下,id的内容是不相关的。它将在浏览器外部用作特殊GUID。@francis是的,这与我所测试的内容类似。更难的部分(就像你说的)正在处理标记中已存在的单词。因此,是否要将现有HTML包装的元素视为有效元素,还是要包装所有非HTML标记字符串?@jcolebrand已具有id的现有跨距是有效的,无需更改。我将将将其保存到数据库中,并允许从数据库中读取、编辑和修改将ID分配给所有尚未具有ID的单词的跨距,并再次保存到db。请参阅我的原始示例,该示例应涵盖该情况以及具有其他html标记(如
)的跨距。
var str = "Bonjour, <b>je m'appelle Francis</b> et <span id=\"existing\">je</span> suis le plus bel homme du monde";
var regex = /(<.+?<\/.+?>|\S+)/g;

var id = 0;

var result = str.replace(regex, function(a) {

    var m = (/<(\w+)([^>]*)>([^<]*)<\/\w+>/).exec(a);

    if (m !== null && m[1] === "span" && m[2].test(/id=/)) 
        return a;

    if (m !== null)
        return "<" + m[1] + m[2] + ">" + m[3].replace(regex, arguments.callee) + "</" + m[1] + ">";

    return "<span id=" + (++id) + ">" + a + "</span>";
});

console.log(result);